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

Kluczowe Wnioski
Kopie zapasowe PostgreSQL mogą obejmować pojedynczą tabelę, pojedynczą 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_dumpalltworzy kopię zapasową każdej bazy danych na instancji Postgres.Przywracanie jest realizowane za pomocą
psql, który wykonuje zrzut SQL z powrotem do docelowej bazy danych.Przy przywracaniu na poziomie tabeli należy zapewnić, że tabela nie istnieje już, aby uniknąć konfliktów.
Podczas tworzenia kopii zapasowych pojedynczych tabel należy zwrócić uwagę na zależności relacyjne.
Zrzuty mogą być wykonywane z lokalnych i przywracane do zdalnych instancji Postgres.
Kopie zawierają polecenia
CREATE,ALTERiCOPY, w zależności od tego, co jest eksportowane.Odpowiednia strategia tworzenia kopii zapasowych zależy od zrozumienia zależności tabel, wykorzystania schematów i środowisk wdrożeniowych.
Zawsze zapewniaj integralność danych, wykonując kopie zapasowe zawierające odwoływane tabele, gdy jest to konieczne.
Q&A Highlights
Co właściwie robi pg_dump?
pg_dumpgeneruje plik SQL oparty na tekście, który zawiera pełny zestaw poleceń potrzebnych do dokładnego odtworzenia tabeli lub bazy danych 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ć właściwą.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ą wykonujesz kopię zapasową. Jeśli przywrócisz tylko jedną tabelę bez powiązanych, możesz naruszyć integralność referencyjną.
Jak mogę wykonać kopię zapasową pełnej bazy danych?
Uruchom polecenie takie jak:
pg_dump -U <user> <database> -f <output.sql>To eksportuje wszystkie tabele, definicje schematów, indeksy i dane dla tej bazy danych.
Co robi pg_dumpall?
pg_dumpalltworzy kopię zapasową każdej bazy danych na serwerze w jednym pliku SQL. Jest to przydatne podczas migracji lub tworzenia migawki całej instancji Postgres.Czy mogę przywrócić tabelę w istniejącej bazie danych?
Tak. Użyj
psql -U <user> -f <file.sql> <database>.Ale upewnij się, że tabela już nie istnieje — w przeciwnym razie otrzymasz błędy „już istnieje” podczas przywracania.
Co się dzieje podczas pełnego przywracania bazy danych?
Plik przywracania działa:
CREATE TABLEALTER TABLECOPY(dla danych tabeli)
przywracając bazę danych do jej dokładnego stanu z czasu zrzutu.
Czy mogę przywrócić na inny serwer niż ten, z którego zrobiłem kopię zapasową?
Tak. Zrzuty są przenośne. Możesz lokalnie wykonać kopię zapasową i przywrócić ją do zdalnej instancji Postgres, pod warunkiem że wersje są kompatybilne.
Czy pg_dump wpływa na działającą bazę danych?
Nie. Działa za pomocą zapytań SQL i nie blokuje całej bazy danych. Bezpiecznie przechwytuje spójny zrzut.
Jak przywrócić wszystkie bazy danych z pliku pg_dumpall?
Użyj:
psql -U <user> -f all_dump.sqlTo odtwarza każdą bazę danych znalezioną w zrzucie.



