Co to jest Postgresql?

Autor: Opublikowano

W skrócie: PostgreSQL to otwartoźródłowy system zarządzania bazami danych, który przechowuje informacje i pozwala aplikacjom je odczytywać oraz zmieniać. Sprawdza się m.in. w sklepach internetowych, systemach firmowych i usługach internetowych, gdzie ważna jest poprawność powiązanych danych. Można go używać bez opłat licencyjnych, ale uruchomienie i utrzymanie bazy wymaga zasobów oraz administracji albo wykupienia usługi zarządzanej.

Czym jest PostgreSQL i jak działa?

PostgreSQL, nazywany również Postgres, jest systemem obiektowo-relacyjnym. Podstawą są tabele, czyli uporządkowane zbiory wierszy i kolumn, które można ze sobą powiązać. Część „obiektowa” oznacza m.in. możliwość definiowania własnych typów danych; na początku pracy najważniejsze jest jednak zrozumienie tabel i relacji.

W bazie sklepu jedna tabela może zawierać klientów, druga zamówienia, a trzecia produkty. Zamówienie odwołuje się do konkretnego klienta przez jego identyfikator. Dzięki temu nie trzeba kopiować wszystkich danych klienta przy każdym zakupie.

Do komunikacji z bazą służy przede wszystkim SQL, czyli język opisywania danych i wykonywania na nich operacji. Przykładowe zapytanie pobierające nazwy dostępnych produktów może wyglądać tak:

SELECT nazwa, cena
FROM produkty
WHERE stan_magazynowy > 0
ORDER BY cena;

PostgreSQL zwykle działa jako osobny proces serwera. Aplikacja łączy się z nim przez odpowiedni sterownik, wysyła zapytania i odbiera wyniki. Przeglądarka użytkownika najczęściej nie kontaktuje się bezpośrednio z bazą — robi to backend, czyli część aplikacji działająca po stronie serwera.

Co chroni poprawność danych?

Jedną z najważniejszych funkcji PostgreSQL są transakcje: grupy operacji traktowane jako jedna całość. Jeśli operacji nie da się poprawnie zakończyć, można wycofać zmiany zamiast pozostawić częściowo zapisane dane.

Wyobraź sobie zakup ostatniej sztuki produktu. Aplikacja musi utworzyć zamówienie i zmniejszyć stan magazynowy. Transakcja pozwala zatwierdzić obie zmiany razem, a odpowiednio zaprojektowane blokowanie lub warunkowa aktualizacja pomagają uniknąć sprzedaży tej samej sztuki dwóm klientom. Sama obecność bazy nie zastępuje jednak prawidłowej logiki aplikacji.

PostgreSQL obsługuje właściwości ACID, czyli zasady zapewniające spójne i trwałe wykonywanie transakcji. Atomowość oznacza wykonanie wszystkich operacji albo żadnej, spójność — zachowanie zadeklarowanych reguł danych, izolacja — kontrolę wpływu równoczesnych transakcji, a trwałość — zachowanie zatwierdzonych zmian zgodnie z gwarancjami konfiguracji systemu.

Poprawność danych wspierają także ograniczenia zapisane w strukturze bazy. Można wymusić unikalność adresu e-mail, zakazać pustej nazwy produktu lub użyć klucza obcego, czyli reguły wymagającej, aby zamówienie wskazywało istniejącego klienta. Takie zabezpieczenia działają niezależnie od formularzy na stronie.

Do czego wykorzystuje się PostgreSQL?

PostgreSQL jest przydatny tam, gdzie dane mają określoną strukturę, są ze sobą powiązane i trzeba je przeszukiwać na różne sposoby. Typowe zastosowania obejmują:

Oprócz zwykłych kolumn tekstowych czy liczbowych PostgreSQL obsługuje m.in. JSONB — format przechowywania dokumentów JSON, który pozwala przeszukiwać ich zawartość i tworzyć indeksy. Przydaje się np. do zapisu dodatkowych parametrów produktów różniących się między kategoriami. Nie oznacza to jednak, że całą bazę należy budować jako zbiór dokumentów bez ustalonej struktury.

Możliwości systemu rozszerzają dodatki. Przykładem jest PostGIS, który umożliwia pracę z danymi przestrzennymi, np. wyszukiwanie punktów znajdujących się w zadanej odległości od lokalizacji użytkownika.

PostgreSQL, MySQL czy SQLite — co wybrać?

Wybór zależy przede wszystkim od wymagań aplikacji, a nie od popularności nazwy. Jeśli gotowy system wymaga konkretnej bazy, najpierw sprawdź jego oficjalną dokumentację. Zamiana silnika bazy nie zawsze jest możliwa bez zmian w oprogramowaniu.

SystemKiedy rozważyć
PostgreSQLAplikacja potrzebuje rozbudowanych zapytań, reguł integralności danych lub rozszerzeń, np. PostGIS.
MySQLWybrana aplikacja go wymaga lub zespół ma przygotowane środowisko i doświadczenie w jego utrzymaniu.
SQLiteDane mają być przechowywane lokalnie, bez osobnego serwera, np. w narzędziu lub niewielkiej aplikacji.

MySQL również obsługuje transakcje w powszechnie używanym silniku InnoDB, a SQLite także zapewnia transakcyjność. Nie są więc z definicji „mniej bezpiecznymi” bazami. Różnice dotyczą m.in. architektury, współbieżnego zapisu, funkcji i sposobu utrzymania; nie istnieje jeden zwycięzca wszystkich porównań wydajności.

Jak zacząć i co trzeba utrzymywać?

Do nauki wystarczy lokalna instalacja PostgreSQL oraz klient, czyli narzędzie do wysyłania zapytań. Może to być tekstowy psql albo graficzny pgAdmin. Utwórz testową bazę z tabelami klientów i zamówień, połącz je kluczem obcym, a następnie przećwicz odczyt danych i wycofanie transakcji.

Przy wdrożeniu produkcyjnym trzeba zadbać o aktualizacje, uprawnienia, kopie zapasowe i testy odtwarzania. Dostęp aplikacji powinien być ograniczony do potrzebnych operacji, a port bazy nie powinien być publicznie dostępny bez uzasadnienia i odpowiednich zabezpieczeń. Indeksy, czyli struktury przyspieszające wyszukiwanie, dobiera się do rzeczywistych zapytań — zwiększają również koszt zapisu i zajmują miejsce.

Usługa zarządzana może przejąć część tych obowiązków. Przed zakupem sprawdź w dokumentacji dostawcy obsługiwaną wersję, dostępne rozszerzenia, limity połączeń, zasady kopii zapasowych oraz koszty odtwarzania. Pierwszym krokiem do wyboru bazy dla konkretnego projektu powinno być potwierdzenie zgodności z aplikacją i ustalenie, kto będzie odpowiadał za jej utrzymanie.

Zobacz też: Co oznacza www?

Przeczytaj także

Dowiedz się, jak PHP-FPM obsługuje żądania PHP, czym różni się od serwera WWW i jak dobrać ustawienia procesów do ruchu oraz zasobów hostingu.
Poznaj BIND, otwarte oprogramowanie serwera DNS: sprawdź, jak obsługuje domeny, czym różnią się jego role i kiedy warto samodzielnie go wdrożyć.
Poznaj najważniejsze Security Headers, ich rolę w ochronie strony oraz sposób sprawdzania i wdrażania nagłówków bez blokowania potrzebnych funkcji.