Porady techniczne: Jak wykonać kopię zapasową i przywrócić bazę danych Postgres?
·

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.
Po pierwsze, zastrzeżenie. Ten post stanowi ogólny przewodnik, jak zbackupować tabelę bazy danych Postgres. Przykłady podane w tekście nie odnoszą się do żadnej konkretnej tabeli ani bazy danych. Jeśli próbujesz zbackupować konkretną tabelę, powinieneś również zbackupować tabele, które odnoszą się do oryginalnych tabel. Ponieważ Postgres jest relacyjną bazą danych, zawsze będą istniały odniesienia między wieloma tabelami.
To jest dokument 'jak to zrobić', który podaje jedynie przykładowe polecenia; sposób, w jaki to się robi, zależy wyłącznie od osoby to wykonującej oraz od specyficznych przypadków użycia. Zawsze zachowuj integralność danych, które próbujesz zbackupować. Zbackupowanie całej bazy danych jest zawsze bezpiecznym rozwiązaniem, ale podczas zbackupowania konkretnych tabel należy być ostrożnym.
SQL-dump/pg_dump:
Idea za metodą SQL-dump polega na wygenerowaniu pliku tekstowego z poleceniami SQL, który po podaniu na serwerze odtworzy bazę danych w tym samym stanie, w jakim znajdowała się w momencie utworzenia zrzutu. PostgreSQL udostępnia program użytkowy pg_dump do tego celu.
pg_dump jest skutecznym i wszechstronnym narzędziem do tworzenia kopii zapasowych bazy danych Postgres i używania tych kopii do przywracania bazy danych Postgres. Nie jest on jednak ograniczony tylko do baz danych. Możemy użyć pg_dump do wykonania kopii zapasowej tabel, a następnie użyć tego do przywrócenia pojedynczych tabel. Używając pg_dump, możesz wykonać kopię zapasową lokalnej bazy danych i przywrócić ją na zdalnej bazie danych.
Jak wykonać kopię zapasową bazy danych Postgres:
Jak przywrócić bazę danych Postgres
Przegląd opcji przywracania Postgresa
Zakres przywracania | Używane narzędzie | Plik wejściowy | Wymóg kluczowy | Typowy błąd |
|---|---|---|---|---|
Pojedyncza tabela | psql | Zrzut tabeli | Tabela nie może już istnieć | Blędy „już istnieje” |
Pojedyncza baza danych | psql | Zrzut bazy danych | Docelowa baza danych musi istnieć | Niezamierzone nadpisanie danych |
Wszystkie bazy danych | psql | Pełny zrzut | Zalecany dostęp superużytkownika | Przywracanie więcej niż planowano |
Przywróć tabelę Postgresa:
$ /opt/msys/3rdParty/bin/psql -U ecuser -f ms_table.sql pePowyższe polecenie zainstaluje tabelę, która została zarchiwizowana w pliku ms_table.sql do bazy danych ‘pe’. Upewnij się, że ta tabela już nie istnieje, w przeciwnym razie zobaczysz wiele błędów „już istnieje”. To polecenie tworzy tabelę i eksportuje wszystkie dane do nowo utworzonej tabeli.
Przywróć bazę danych Postgresa:
$ /opt/msys/3rdParty/bin/psql -U ecuser -d pe -f pe_dump.sqlPodobnie jak w przypadku przywracania tabeli, możemy użyć powyższego polecenia do przywrócenia całej bazy danych. Tutaj przywracamy bazę danych ‘pe’ za pomocą pliku pe_dump.sql, który utworzyliśmy podczas tworzenia kopii zapasowej bazy danych w sekcji Kopia zapasowa powyżej.
Przywróć wszystkie bazy danych:
$ /opt/msys/3rdParty/bin/psql -u ecuser -f all_dump.sqlPrzywróć wszystkie bazy danych za pomocą powyższego polecenia. ‘all_dump.sql’ to plik, który został utworzony za pomocą
pg_dumpall. Powyższe polecenie zwróci nam wszystkie bazy danych Postgresa w dokładnym stanie, w jakim były, gdy wykonano zrzut z oryginalnego serwera bazy danych.



