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

Karan Singh

19 cze 2013

Email

1 min read

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_dump tworzy plik tekstowy SQL zawierający DDL i dane potrzebne do odtworzenia docelowej tabeli lub bazy danych.

    • pg_dumpall wykonuje 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, ALTER i COPY, 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_dump generuje 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_dumpall tworzy 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.sql

    To 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.

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.

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.

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.

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:

Opcje kopii zapasowej Postgresa - przegląd

Zakres kopii zapasowej

Używane narzędzie

Plik wyjściowy

Co zawiera

Kiedy używać

Pojedyncza tabela

pg_dump

.sql

DDL tabeli + dane

Odzyskiwanie lub migracja izolowanej tabeli

Pojedyncza baza danych

pg_dump

.sql

Wszystkie tabele, schemat, dane

Pełna kopia zapasowa bazy danych

Wszystkie bazy danych

pg_dumpall

.sql

Każda baza danych na instancji

Kopia zapasowa lub migracja na poziomie serwera


Kopia zapasowa tabeli Postgresa:

$ /opt/msys/3rdParty/bin/pg_dump–table maincontrol.orgs -U ecuser pe -f ms_table.sql

Powyższa komenda to przykład, jak wykonać kopię zapasową konkretnej tabeli z bazy danych Postgresa. Używając powyższej komendy, tworzymy kopię zapasową tabeli 'orgs' w schemacie 'maincontrol' z bazy danych 'pe' do pliku ms_table.sql. Aby wykonać kopię zapasową konkretnej tabeli, użyj opcji –table TABLENAME w komendzie pg_dump. Jeśli w różnych schematach znajdują się tabele o tych samych nazwach, użyj opcji –schema SCHEMANAME.

  1. Kopia zapasowa konkretnej bazy danych Postgresa:

    $ /opt/msys/3rdParty/bin/pg_dump -U ecuser pe -f pe_dump.sql

    To przykład wykonania kopii zapasowej konkretnej bazy danych Postgresa. Używając powyższej komendy, wykonujemy kopię zapasową bazy danych dla Message Central 'pe' do pliku pe_dump.sql. Plik kopii zapasowej zawiera polecenia create table, alter table i copy dla wszystkich tabel w bazie danych 'pe'.

  2. Kopia zapasowa wszystkich baz danych Postgresa:

    $ /opt/msys/3rdParty/bin/pg_dumpall -U ecuser> all_dump.sql

    Możesz wykonać kopię zapasową wszystkich baz danych używając komendy pg_dumpall. Powyższa komenda stworzy zrzut wszystkich baz danych, które znajdują się na instancji Postgresa działającej na danym serwerze. Aby wylistować wszystkie bazy danych, które zostały wykonane, użyj komendy grep "^[\\]connect" all.sql.

Opcje kopii zapasowej Postgresa - przegląd

Zakres kopii zapasowej

Używane narzędzie

Plik wyjściowy

Co zawiera

Kiedy używać

Pojedyncza tabela

pg_dump

.sql

DDL tabeli + dane

Odzyskiwanie lub migracja izolowanej tabeli

Pojedyncza baza danych

pg_dump

.sql

Wszystkie tabele, schemat, dane

Pełna kopia zapasowa bazy danych

Wszystkie bazy danych

pg_dumpall

.sql

Każda baza danych na instancji

Kopia zapasowa lub migracja na poziomie serwera


Kopia zapasowa tabeli Postgresa:

$ /opt/msys/3rdParty/bin/pg_dump–table maincontrol.orgs -U ecuser pe -f ms_table.sql

Powyższa komenda to przykład, jak wykonać kopię zapasową konkretnej tabeli z bazy danych Postgresa. Używając powyższej komendy, tworzymy kopię zapasową tabeli 'orgs' w schemacie 'maincontrol' z bazy danych 'pe' do pliku ms_table.sql. Aby wykonać kopię zapasową konkretnej tabeli, użyj opcji –table TABLENAME w komendzie pg_dump. Jeśli w różnych schematach znajdują się tabele o tych samych nazwach, użyj opcji –schema SCHEMANAME.

  1. Kopia zapasowa konkretnej bazy danych Postgresa:

    $ /opt/msys/3rdParty/bin/pg_dump -U ecuser pe -f pe_dump.sql

    To przykład wykonania kopii zapasowej konkretnej bazy danych Postgresa. Używając powyższej komendy, wykonujemy kopię zapasową bazy danych dla Message Central 'pe' do pliku pe_dump.sql. Plik kopii zapasowej zawiera polecenia create table, alter table i copy dla wszystkich tabel w bazie danych 'pe'.

  2. Kopia zapasowa wszystkich baz danych Postgresa:

    $ /opt/msys/3rdParty/bin/pg_dumpall -U ecuser> all_dump.sql

    Możesz wykonać kopię zapasową wszystkich baz danych używając komendy pg_dumpall. Powyższa komenda stworzy zrzut wszystkich baz danych, które znajdują się na instancji Postgresa działającej na danym serwerze. Aby wylistować wszystkie bazy danych, które zostały wykonane, użyj komendy grep "^[\\]connect" all.sql.

Opcje kopii zapasowej Postgresa - przegląd

Zakres kopii zapasowej

Używane narzędzie

Plik wyjściowy

Co zawiera

Kiedy używać

Pojedyncza tabela

pg_dump

.sql

DDL tabeli + dane

Odzyskiwanie lub migracja izolowanej tabeli

Pojedyncza baza danych

pg_dump

.sql

Wszystkie tabele, schemat, dane

Pełna kopia zapasowa bazy danych

Wszystkie bazy danych

pg_dumpall

.sql

Każda baza danych na instancji

Kopia zapasowa lub migracja na poziomie serwera


Kopia zapasowa tabeli Postgresa:

$ /opt/msys/3rdParty/bin/pg_dump–table maincontrol.orgs -U ecuser pe -f ms_table.sql

Powyższa komenda to przykład, jak wykonać kopię zapasową konkretnej tabeli z bazy danych Postgresa. Używając powyższej komendy, tworzymy kopię zapasową tabeli 'orgs' w schemacie 'maincontrol' z bazy danych 'pe' do pliku ms_table.sql. Aby wykonać kopię zapasową konkretnej tabeli, użyj opcji –table TABLENAME w komendzie pg_dump. Jeśli w różnych schematach znajdują się tabele o tych samych nazwach, użyj opcji –schema SCHEMANAME.

  1. Kopia zapasowa konkretnej bazy danych Postgresa:

    $ /opt/msys/3rdParty/bin/pg_dump -U ecuser pe -f pe_dump.sql

    To przykład wykonania kopii zapasowej konkretnej bazy danych Postgresa. Używając powyższej komendy, wykonujemy kopię zapasową bazy danych dla Message Central 'pe' do pliku pe_dump.sql. Plik kopii zapasowej zawiera polecenia create table, alter table i copy dla wszystkich tabel w bazie danych 'pe'.

  2. Kopia zapasowa wszystkich baz danych Postgresa:

    $ /opt/msys/3rdParty/bin/pg_dumpall -U ecuser> all_dump.sql

    Możesz wykonać kopię zapasową wszystkich baz danych używając komendy pg_dumpall. Powyższa komenda stworzy zrzut wszystkich baz danych, które znajdują się na instancji Postgresa działającej na danym serwerze. Aby wylistować wszystkie bazy danych, które zostały wykonane, użyj komendy grep "^[\\]connect" all.sql.

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 .sql

Tabela nie może już istnieć

Blędy „już istnieje”

Pojedyncza baza danych

psql

Zrzut bazy danych .sql

Docelowa baza danych musi istnieć

Niezamierzone nadpisanie danych

Wszystkie bazy danych

psql

Pełny zrzut .sql

Zalecany dostęp superużytkownika

Przywracanie więcej niż planowano


  1. Przywróć tabelę Postgresa:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -f ms_table.sql pe

    Powyż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.

  2. Przywróć bazę danych Postgresa:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -d pe -f pe_dump.sql

    Podobnie 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.

  3. Przywróć wszystkie bazy danych:

    $ /opt/msys/3rdParty/bin/psql -u ecuser -f all_dump.sql

    Przywróć 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.

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 .sql

Tabela nie może już istnieć

Blędy „już istnieje”

Pojedyncza baza danych

psql

Zrzut bazy danych .sql

Docelowa baza danych musi istnieć

Niezamierzone nadpisanie danych

Wszystkie bazy danych

psql

Pełny zrzut .sql

Zalecany dostęp superużytkownika

Przywracanie więcej niż planowano


  1. Przywróć tabelę Postgresa:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -f ms_table.sql pe

    Powyż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.

  2. Przywróć bazę danych Postgresa:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -d pe -f pe_dump.sql

    Podobnie 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.

  3. Przywróć wszystkie bazy danych:

    $ /opt/msys/3rdParty/bin/psql -u ecuser -f all_dump.sql

    Przywróć 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.

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 .sql

Tabela nie może już istnieć

Blędy „już istnieje”

Pojedyncza baza danych

psql

Zrzut bazy danych .sql

Docelowa baza danych musi istnieć

Niezamierzone nadpisanie danych

Wszystkie bazy danych

psql

Pełny zrzut .sql

Zalecany dostęp superużytkownika

Przywracanie więcej niż planowano


  1. Przywróć tabelę Postgresa:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -f ms_table.sql pe

    Powyż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.

  2. Przywróć bazę danych Postgresa:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -d pe -f pe_dump.sql

    Podobnie 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.

  3. Przywróć wszystkie bazy danych:

    $ /opt/msys/3rdParty/bin/psql -u ecuser -f all_dump.sql

    Przywróć 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.

Inne wiadomości

Przeczytaj więcej z tej kategorii

A person is standing at a desk while typing on a laptop.

Kompletna platforma oparta na sztucznej inteligencji, która rośnie wraz z Twoim biznesem.

A person is standing at a desk while typing on a laptop.

Kompletna platforma oparta na sztucznej inteligencji, która rośnie wraz z Twoim biznesem.