Porady techniczne: Jak wykonać kopię zapasową i przywrócić bazę danych Postgres?
Karan Singh
19 cze 2013
1 min read

Najważniejsze informacje
Kopie zapasowe PostgreSQL mogą mieć na celu jedną tabelę, jedną bazę danych lub wszystkie bazy danych w zależności od Twoich potrzeb.
pg_dumptworzy plik tekstowy SQL zawierający DDL i dane potrzebne do odtworzenia docelowej tabeli lub bazy danych.pg_dumpallwykonuje kopię zapasową w każdej bazie danych w instancji Postgresa.Przywracanie odbywa się za pomocą
psql, który wykonuje zrzut SQL z powrotem do docelowej bazy danych.Przywracanie na poziomie tabeli wymaga upewnienia się, że tabela już nie istnieje, aby uniknąć konfliktów.
Podczas tworzenia kopii zapasowych indywidualnych tabel, należy mieć na uwadze zależności relacyjne.
Zrzuty można pobierać lokalnie i przywracać do zdalnych instancji Postgresa.
Kopie zapasowe zawierają polecenia
CREATE,ALTERiCOPY, w zależności od tego, co jest eksportowane.Właściwa strategia tworzenia kopii zapasowych zależy od zrozumienia relacji między tabelami, wykorzystania schematów i środowisk wdrożeniowych.
Zawsze zapewniaj integralność danych, wykonując kopie zapasowe, które obejmują tabele referencyjne, kiedy to konieczne.
Podsumowanie pytań i odpowiedzi
Co tak naprawdę robi pg_dump?
pg_dumpgeneruje plik SQL oparty na tekście zawierający pełny zestaw poleceń potrzebnych do odtworzenia tabeli lub bazy danych dokładnie tak, jak istniała w momencie tworzenia kopii zapasowej.Czy mogę wykonać kopię zapasową tylko jednej tabeli zamiast całej bazy danych?
Tak. Użyj
pg_dump --table TABLENAME, aby wyeksportować konkretną tabelę. Jeśli tabele o tej samej nazwie istnieją w różnych schematach, użyj--schema, aby określić odpowiedni schemat.Czy powinienem martwić się o powiązane tabele podczas tworzenia kopii zapasowej pojedynczej tabeli?
Absolutnie. PostgreSQL jest relacyjny, więc inne tabele mogą odnosić się do tej, którą archiwizujesz. Jeśli przywrócisz tylko jedną tabelę bez powiązanych, możesz naruszyć integralność referencyjną.
Jak mogę zabezpieczyć pełną bazę danych?
Uruchom polecenie takie jak:
pg_dump -U <user> <database> -f <output.sql>To eksportuje wszystkie tabele, definicje schematu, indeksy i dane dla tej bazy danych.
Co robi pg_dumpall?
pg_dumpalltworzy kopię zapasową wszystkich baz danych na serwerze do jednego pliku SQL. Jest przydatny podczas migracji lub tworzenia migawki całego instancji Postgres.Czy mogę przywrócić tabelę do istniejącej bazy danych?
Tak. Użyj
psql -U <user> -f <file.sql> <database>.Ale upewnij się, że tabela nie istnieje już — w przeciwnym razie podczas przywracania otrzymasz błędy „już istnieje”.
Co się dzieje podczas pełnego przywracania bazy danych?
Plik przywracania działa:
UTWÓRZ TABELĘZMIEŃ TABELĘKOPIUJ(dla danych tabeli)
przywracając bazę danych do jej dokładnego stanu w momencie zrzutu.
Czy mogę przywrócić do innego serwera niż ten, z którego wykonałem kopię zapasową?
Tak. Zrzuty są przenośne. Możesz wykonać lokalną kopię zapasową i przywrócić ją do zdalnej instancji Postgresa, pod warunkiem, że wersje są zgodne.
Czy pg_dump ma wpływ na działającą bazę danych?
Nie. Działa za pomocą zapytań SQL i nie blokuje całej bazy danych. Bezpiecznie przechwytuje spójną migawkę.
Jak mogę przywrócić wszystkie bazy danych z pliku pg_dumpall?
Użyj:
psql -U <użytkownik> -f all_dump.sqlTo przywraca każdą bazę danych znalezioną w zrzucie.



