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?

Kluczowe Wnioski

    • Kopie zapasowe PostgreSQL mogą obejmować pojedynczą tabelę, pojedynczą 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 tworzy 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, ALTER i COPY, 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_dump generuje 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_dumpall tworzy 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 TABLE

    • ALTER TABLE

    • COPY (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.sql

    To odtwarza każdą bazę danych znalezioną w zrzucie.

Najpierw zastrzeżenie. Ten post dostarcza ogólny przewodnik dotyczący tworzenia kopii zapasowej tabeli bazy danych Postgres. Podane przykłady nie odnoszą się do żadnej konkretnej tabeli ani bazy danych. Jeśli próbujesz zrobić kopię zapasową konkretnej tabeli, powinieneś również zabezpieczyć tabele, które odnoszą się do oryginalnych tabel. Ponieważ Postgres jest relacyjną bazą danych, zawsze będą odniesienia między wieloma tabelami.

To jest dokument "jak to zrobić", który podaje tylko przykładowe polecenia, a to, jak jest to faktycznie robione, zależy wyłącznie od osoby to robiącej oraz od specyficznych przypadków użycia. Zawsze utrzymuj integralność danych, których kopię próbujesz zrobić. Tworzenie kopii zapasowej całej bazy danych jest zawsze bezpieczną opcją, ale przy robieniu kopii zapasowej konkretnych tabel trzeba być ostrożnym.

Najpierw zastrzeżenie. Ten post dostarcza ogólny przewodnik dotyczący tworzenia kopii zapasowej tabeli bazy danych Postgres. Podane przykłady nie odnoszą się do żadnej konkretnej tabeli ani bazy danych. Jeśli próbujesz zrobić kopię zapasową konkretnej tabeli, powinieneś również zabezpieczyć tabele, które odnoszą się do oryginalnych tabel. Ponieważ Postgres jest relacyjną bazą danych, zawsze będą odniesienia między wieloma tabelami.

To jest dokument "jak to zrobić", który podaje tylko przykładowe polecenia, a to, jak jest to faktycznie robione, zależy wyłącznie od osoby to robiącej oraz od specyficznych przypadków użycia. Zawsze utrzymuj integralność danych, których kopię próbujesz zrobić. Tworzenie kopii zapasowej całej bazy danych jest zawsze bezpieczną opcją, ale przy robieniu kopii zapasowej konkretnych tabel trzeba być ostrożnym.

Najpierw zastrzeżenie. Ten post dostarcza ogólny przewodnik dotyczący tworzenia kopii zapasowej tabeli bazy danych Postgres. Podane przykłady nie odnoszą się do żadnej konkretnej tabeli ani bazy danych. Jeśli próbujesz zrobić kopię zapasową konkretnej tabeli, powinieneś również zabezpieczyć tabele, które odnoszą się do oryginalnych tabel. Ponieważ Postgres jest relacyjną bazą danych, zawsze będą odniesienia między wieloma tabelami.

To jest dokument "jak to zrobić", który podaje tylko przykładowe polecenia, a to, jak jest to faktycznie robione, zależy wyłącznie od osoby to robiącej oraz od specyficznych przypadków użycia. Zawsze utrzymuj integralność danych, których kopię próbujesz zrobić. Tworzenie kopii zapasowej całej bazy danych jest zawsze bezpieczną opcją, ale przy robieniu kopii zapasowej konkretnych tabel trzeba być ostrożnym.

Zrzut SQL/pg_dump:

Idea metody zrzutu SQL polega na wygenerowaniu pliku tekstowego z poleceniami SQL, które po ponownym wprowadzeniu do serwera odtworzą bazę danych w takim samym stanie, w jakim była w momencie zrzutu. PostgreSQL zapewnia program narzędziowy pg_dump do tego celu.

pg_dump to efektywne i kompleksowe narzędzie do tworzenia kopii zapasowych bazy danych Postgres i używania tych kopii do przywracania bazy danych postgres. Nie jest jednak ograniczone wyłącznie do bazy danych. Możemy użyć pg_dump do tworzenia kopii zapasowych tabel i następnie używać ich do przywracania poszczególnych tabel. Korzystając z pg_dump, można wykonać kopię zapasową lokalnej bazy danych i przywrócić ją na zdalnej bazie danych.

Idea metody zrzutu SQL polega na wygenerowaniu pliku tekstowego z poleceniami SQL, które po ponownym wprowadzeniu do serwera odtworzą bazę danych w takim samym stanie, w jakim była w momencie zrzutu. PostgreSQL zapewnia program narzędziowy pg_dump do tego celu.

pg_dump to efektywne i kompleksowe narzędzie do tworzenia kopii zapasowych bazy danych Postgres i używania tych kopii do przywracania bazy danych postgres. Nie jest jednak ograniczone wyłącznie do bazy danych. Możemy użyć pg_dump do tworzenia kopii zapasowych tabel i następnie używać ich do przywracania poszczególnych tabel. Korzystając z pg_dump, można wykonać kopię zapasową lokalnej bazy danych i przywrócić ją na zdalnej bazie danych.

Idea metody zrzutu SQL polega na wygenerowaniu pliku tekstowego z poleceniami SQL, które po ponownym wprowadzeniu do serwera odtworzą bazę danych w takim samym stanie, w jakim była w momencie zrzutu. PostgreSQL zapewnia program narzędziowy pg_dump do tego celu.

pg_dump to efektywne i kompleksowe narzędzie do tworzenia kopii zapasowych bazy danych Postgres i używania tych kopii do przywracania bazy danych postgres. Nie jest jednak ograniczone wyłącznie do bazy danych. Możemy użyć pg_dump do tworzenia kopii zapasowych tabel i następnie używać ich do przywracania poszczególnych tabel. Korzystając z pg_dump, można wykonać kopię zapasową lokalnej bazy danych i przywrócić ją na zdalnej bazie danych.

Jak wykonać kopię zapasową bazy danych Postgres:

Kopia zapasowa tabeli Postgres:

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

Powyższe polecenie jest przykładem, jak wykonać kopię zapasową konkretnej tabeli z bazy danych Postgres. Używając powyższego polecenia, wykonujemy 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 poleceniu pg_dump. Jeśli istnieją takie same nazwy tabel w różnych schematach, użyj opcji –schema SCHEMANAME.

  1. Kopia zapasowa konkretnej bazy danych Postgres:

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

    To jest przykład tworzenia kopii zapasowej konkretnej bazy danych Postgres. Używając powyższego polecenia, wykonujemy kopię zapasową bazy danych dla Message Central „pe” do pliku pe_dump.sql. Plik kopii zapasowej zawiera polecenia create table, alter table oraz copy dla wszystkich tabel w bazie danych „pe”.

  2. Kopia zapasowa wszystkich baz danych Postgres:

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

    Można wykonać kopię zapasową wszystkich baz danych przy użyciu polecenia pg_dumpall. Powyższe polecenie utworzy zrzut wszystkich baz danych, które znajdują się na instancji Postgres działającej na danym serwerze. Aby wyświetlić listę wszystkich baz danych, które zostały zarchiwizowane, użyj polecenia grep „^[\]connect” all.sql.

Kopia zapasowa tabeli Postgres:

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

Powyższe polecenie jest przykładem, jak wykonać kopię zapasową konkretnej tabeli z bazy danych Postgres. Używając powyższego polecenia, wykonujemy 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 poleceniu pg_dump. Jeśli istnieją takie same nazwy tabel w różnych schematach, użyj opcji –schema SCHEMANAME.

  1. Kopia zapasowa konkretnej bazy danych Postgres:

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

    To jest przykład tworzenia kopii zapasowej konkretnej bazy danych Postgres. Używając powyższego polecenia, wykonujemy kopię zapasową bazy danych dla Message Central „pe” do pliku pe_dump.sql. Plik kopii zapasowej zawiera polecenia create table, alter table oraz copy dla wszystkich tabel w bazie danych „pe”.

  2. Kopia zapasowa wszystkich baz danych Postgres:

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

    Można wykonać kopię zapasową wszystkich baz danych przy użyciu polecenia pg_dumpall. Powyższe polecenie utworzy zrzut wszystkich baz danych, które znajdują się na instancji Postgres działającej na danym serwerze. Aby wyświetlić listę wszystkich baz danych, które zostały zarchiwizowane, użyj polecenia grep „^[\]connect” all.sql.

Kopia zapasowa tabeli Postgres:

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

Powyższe polecenie jest przykładem, jak wykonać kopię zapasową konkretnej tabeli z bazy danych Postgres. Używając powyższego polecenia, wykonujemy 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 poleceniu pg_dump. Jeśli istnieją takie same nazwy tabel w różnych schematach, użyj opcji –schema SCHEMANAME.

  1. Kopia zapasowa konkretnej bazy danych Postgres:

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

    To jest przykład tworzenia kopii zapasowej konkretnej bazy danych Postgres. Używając powyższego polecenia, wykonujemy kopię zapasową bazy danych dla Message Central „pe” do pliku pe_dump.sql. Plik kopii zapasowej zawiera polecenia create table, alter table oraz copy dla wszystkich tabel w bazie danych „pe”.

  2. Kopia zapasowa wszystkich baz danych Postgres:

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

    Można wykonać kopię zapasową wszystkich baz danych przy użyciu polecenia pg_dumpall. Powyższe polecenie utworzy zrzut wszystkich baz danych, które znajdują się na instancji Postgres działającej na danym serwerze. Aby wyświetlić listę wszystkich baz danych, które zostały zarchiwizowane, użyj polecenia grep „^[\]connect” all.sql.

Jak przywrócić bazę danych Postgres

  1. Przywróć tabelę Postgres:

    $ /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 nie istnieje już, w przeciwnym razie pojawi się mnóstwo błędów ‘już istnieje’. To polecenie tworzy tabelę i eksportuje wszystkie dane do nowo utworzonej tabeli.

  2. Przywróć bazę danych Postgres:

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

    Podobnie jak przy przywracaniu 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 Backup powyżej.

  3. Przywróć wszystkie bazy danych:

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

    Przywróć wszystkie bazy danych używając powyższego polecenia. ‘all_dump.sql’ to plik, który został utworzony przy użyciu pg_dumpall. Powyższe polecenie da nam wszystkie bazy danych Postgres w dokładnym stanie, w jakim były, gdy zrobiono zrzut z oryginalnego serwera baz danych.

  1. Przywróć tabelę Postgres:

    $ /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 nie istnieje już, w przeciwnym razie pojawi się mnóstwo błędów ‘już istnieje’. To polecenie tworzy tabelę i eksportuje wszystkie dane do nowo utworzonej tabeli.

  2. Przywróć bazę danych Postgres:

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

    Podobnie jak przy przywracaniu 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 Backup powyżej.

  3. Przywróć wszystkie bazy danych:

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

    Przywróć wszystkie bazy danych używając powyższego polecenia. ‘all_dump.sql’ to plik, który został utworzony przy użyciu pg_dumpall. Powyższe polecenie da nam wszystkie bazy danych Postgres w dokładnym stanie, w jakim były, gdy zrobiono zrzut z oryginalnego serwera baz danych.

  1. Przywróć tabelę Postgres:

    $ /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 nie istnieje już, w przeciwnym razie pojawi się mnóstwo błędów ‘już istnieje’. To polecenie tworzy tabelę i eksportuje wszystkie dane do nowo utworzonej tabeli.

  2. Przywróć bazę danych Postgres:

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

    Podobnie jak przy przywracaniu 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 Backup powyżej.

  3. Przywróć wszystkie bazy danych:

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

    Przywróć wszystkie bazy danych używając powyższego polecenia. ‘all_dump.sql’ to plik, który został utworzony przy użyciu pg_dumpall. Powyższe polecenie da nam wszystkie bazy danych Postgres w dokładnym stanie, w jakim były, gdy zrobiono zrzut z oryginalnego serwera baz danych.

Inne wiadomości

Czytaj więcej z tej kategorii

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

Kompletna, natywna dla AI platforma, która rośnie wraz z Twoim biznesem.

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

Kompletna, natywna dla AI platforma, która rośnie wraz z Twoim biznesem.