Trwałość danych, migracje i podstawowy backup PostgreSQL
Odróżnisz volume od kopii zapasowej, sprawdzisz schemat i zapiszesz podstawowy zrzut bazy.
1. Krótka teoria
Nazwany volume utrzymuje pliki PostgreSQL przy wymianie kontenera, lecz nie jest kopią zapasową. Błąd operatora, uszkodzenie danych albo utrata hosta mogą dotknąć także volume. pg_dump tworzy logiczny zrzut wybranej bazy; format -Fc pozwala obejrzeć zawartość przez pg_restore --list. Przekierowanie > zapisuje plik na hoście, z którego uruchomiono polecenie. Zrzut może zawierać dane poufne, więc potrzebuje ograniczonego dostępu, miejsca na dysku i przechowywania poza repozytorium. Sam fakt powstania pliku nie dowodzi, że da się go odtworzyć; procedury odtwarzania i DR należą do kolejnego poziomu. Migracja to kontrolowana, wersjonowana zmiana schematu związana z wersją aplikacji. Przed wdrożeniem należy wiedzieć, czy zmiana wymaga migracji i czy stara oraz nowa wersja aplikacji mogą pracować z danym schematem. Skrypt SQL można wykonać przez psql, ale w realnym projekcie potrzebny jest rejestr zastosowanych migracji i narzędzie dopasowane do aplikacji. Wykonuj migrację tylko w kontrolowanym środowisku ćwiczeniowym, po zrobieniu kopii danych.
2. Przykłady komend
docker volume ls
Potwierdza obecność nazwanego volume bazy.
$ docker volume ls
docker compose exec app-db psql -U orders -d orders -c '\dt'
Wyświetla tabele bieżącej bazy.
$ docker compose exec app-db psql -U orders -d orders -c '\dt'
mkdir -p ../backups
Tworzy katalog kopii poza katalogiem repozytorium ćwiczeniowego.
$ mkdir -p ../backups
docker compose exec -T app-db pg_dump -U orders -d orders -Fc > ../backups/orders.backup
Zapisuje logiczny zrzut bazy na hoście w formacie custom.
$ docker compose exec -T app-db pg_dump -U orders -d orders -Fc > ../backups/orders.backup
test -s ../backups/orders.backup
Sprawdza, że plik zrzutu istnieje i nie jest pusty.
$ test -s ../backups/orders.backup
docker compose exec -T app-db pg_restore --list < ../backups/orders.backup
Odczytuje spis obiektów zrzutu bez odtwarzania danych.
$ docker compose exec -T app-db pg_restore --list < ../backups/orders.backup
docker compose exec -T app-db psql -U orders -d orders < migrations/001_create_orders.sql
Wykonuje przygotowany skrypt zmiany schematu w środowisku ćwiczeniowym.
$ docker compose exec -T app-db psql -U orders -d orders < migrations/001_create_orders.sql
3. Zadanie praktyczne
orders odczytaj listę tabel. Przygotuj lokalny plik migrations/001_create_orders.sql z jedną świadomą zmianą schematu i opisz, jak odnotujesz jej wykonanie. Najpierw utwórz ../backups i wykonaj pg_dump -Fc do tego katalogu, sprawdź rozmiar pliku i spis obiektów. Dopiero potem uruchom skrypt i ponownie odczytaj tabele. Nie traktuj tego jako kompletnej procedury odtwarzania.
4. Typowe błędy
- Uznawanie volume za niezależną kopię zapasową.
- Commitowanie zrzutu danych do repozytorium.
- Wykonywanie migracji bez informacji, która wersja schematu już obowiązuje.
- Zakładanie, że niepusty plik gwarantuje możliwość odtworzenia.
- Pomijanie kontroli wolnego miejsca przed utworzeniem kopii.
5. Podsumowanie
Volume utrzymuje dane przy wymianie kontenera, a pg_dump tworzy odrębny logiczny zrzut. Migracje pozwalają kontrolować zmiany schematu. Sprawdzenie pliku i listy obiektów to pierwsza kontrola kopii, nie pełny test odtwarzania.