Poradnik technologiczny

PostgreSQL w firmie: projektowanie bazy, wydajność i sprawdzony backup

Dobra baza danych pilnuje reguł biznesowych i daje się odtworzyć po awarii. W PostgreSQL zacznij od spójnego modelu, rzeczywistych zapytań oraz wymagań dotyczących utraty danych i czasu przywrócenia.

Około 3 min czytaniaPrzejdź do ćwiczeń

Projektowanie PostgreSQL: reguły także w bazie danych

Rozdziel klientów, zamówienia i pozycje zamówień. Ustal klucze, relacje oraz pola wymagane. Formularz może sprawdzać dane dla wygody użytkownika, ale import i integracja API również zapisują rekordy. Ograniczenia bazy powinny chronić reguły wspólne dla wszystkich kanałów.

Klucz obcy zapobiega wskazaniu nieistniejącego rekordu, UNIQUE kontroluje unikalność, a CHECK sprawdza warunek dotyczący wiersza. CHECK sam nie wyklucza wartości NULL, dlatego dla wymaganej ilości potrzebne są oba ograniczenia. Przykład poniżej jest niewielkim modelem pozycji zamówienia do przećwiczenia na bazie testowej.

sql
CREATE TABLE order_items (
  order_id bigint NOT NULL,
  line_no integer NOT NULL CHECK (line_no > 0),
  quantity integer NOT NULL CHECK (quantity > 0),
  unit_price numeric(12, 2) NOT NULL CHECK (unit_price >= 0),
  PRIMARY KEY (order_id, line_no)
);

Indeksy PostgreSQL dobieraj do faktycznych zapytań

Wypisz najczęstsze operacje: ostatnie zamówienia klienta, otwarte zgłoszenia, wyszukiwanie produktu. Przygotuj dane o reprezentatywnej wielkości i rozkładzie. Szybki wynik na tabeli z dwudziestoma rekordami niewiele mówi o zachowaniu systemu po roku pracy.

EXPLAIN pokazuje plan wykonania, a EXPLAIN ANALYZE dodatkowo uruchamia zapytanie i podaje pomiary. Z tego powodu wariantu ANALYZE nie należy bezrefleksyjnie używać do operacji zmieniających dane. Oceniaj liczbę odczytanych wierszy, sortowanie i różnice między estymacją a wykonaniem. Dodany indeks też zajmuje miejsce i musi być utrzymywany przy zapisie.

Backup PostgreSQL: pg_dump i test odtworzenia

pg_dump tworzy logiczną kopię jednej bazy, spójną dla momentu rozpoczęcia eksportu. Format custom obsługuje pg_restore. Sam plik dump nie zastępuje informacji o rolach, wymaganych rozszerzeniach, konfiguracji aplikacji i plikach przechowywanych poza bazą. Te elementy uwzględnij w planie odtworzenia.

Poniższy zestaw poleceń zakłada skonfigurowane połączenia libpq nazwane firma_prod oraz firma_test. Najpierw sprawdź ich hosty: odtwarzanie ma trafić wyłącznie na oddzielny serwer testowy. Wymagane role i rozszerzenia muszą być przygotowane, a docelowa baza firma_restore_test nie może już istnieć.

bash
pg_dump --dbname='service=firma_prod' --format=custom --file=firma.dump
createdb --maintenance-db='service=firma_test dbname=postgres' --template=template0 firma_restore_test
pg_restore --dbname='service=firma_test dbname=firma_restore_test' --exit-on-error firma.dump

Kiedy potrzebne jest odtwarzanie do punktu w czasie — PITR?

Ustal dwie wartości: ile danych firma może utracić i jak długo może nie działać. Kopia wykonywana raz dziennie może nie odpowiadać wymaganiom systemu przyjmującego zamówienia co minutę. Jeżeli potrzebne jest odtworzenie do wybranego momentu, zaplanuj kopię bazową i ciągłą archiwizację WAL.

PITR wymaga kompletnego ciągu odpowiednich plików WAL. Nie powstaje przez połączenie zwykłego pg_dump z późniejszymi logami. Kontroluj skuteczność archiwizacji, wolne miejsce i retencję, aby usuwanie starych plików nie przerwało możliwości przywrócenia deklarowanego okresu.

Jak sprawdzić, czy backup PostgreSQL rzeczywiście działa?

Odtwórz kopię na izolowanym środowisku, uruchom aplikację i wykonaj podstawowy proces biznesowy. Porównaj liczbę kluczowych rekordów, relacje i wybrane sumy kontrolne danych. Zmierz rzeczywisty czas od rozpoczęcia przywracania do gotowości systemu.

Przechowuj kopię także poza serwerem bazy, z kontrolą dostępu i ochroną odpowiednią do zawartości. Alarmuj o braku nowej kopii, a nie tylko o zgłoszonym błędzie programu. Plan powinien wskazywać osobę odpowiedzialną oraz regularny termin kolejnej próby odtworzenia.

Zastosuj przeczytane wskazówki

Ćwiczenia i lista kontrolna

Sprawdź decyzje na przykładzie, a potem przejdź przez zadania we własnym środowisku testowym.

Jak duże jest okno utraty danych?

Do 1440 minut między kopiami

Ten odstęp jest większy od dopuszczalnej utraty danych. Rozważ częstsze kopie lub kopię bazową i archiwizację WAL dla PITR.

Uproszczony przykład zakłada skuteczne kopie. Nie mierzy czasu odtworzenia, opóźnienia archiwizacji ani awarii backupu.

Lista do wykonania

Zaznaczone kroki: 0 z 4

Opcjonalny zapis na kolejne wizyty. Wyłączenie usuwa zapis, zachowując bieżące zaznaczenia. Więcej o prywatności

Sprawdź swoją wiedzę

1. Pole quantity ma być zawsze wypełnione i większe od zera. Jakie ograniczenia odpowiadają temu wymaganiu?
2. Co jest podstawą odtwarzania PostgreSQL do wybranego punktu w czasie, czyli PITR?

Kontynuuj naukę

Dane i integracje · Krok 1 z 3

Dalej: Uporządkuj logikę integracji

Wdrożenie i utrzymanie · Krok 2 z 3

Dalej: Przygotuj serwer i aktualizację