Postgres pg_dump i pg_restore

W tym temacie opisano, jak utworzyć kopię zapasową bazy danych Lakebase przy użyciu narzędzia Postgres pg_dump i jak przywrócić kopię zapasową przy użyciu polecenia pg_restore.

Kiedy należy używać pg_dump i pg_restore

Należy używać pg_dump i pg_restore do wymagań dotyczących odzyskiwania po awarii oraz ciągłości działania, lub gdy konieczne jest przechowywanie pełnych kopii zapasowych poza usługą Lakebase. Ta metoda zapewnia pełne eksporty bazy danych, które mogą być przechowywane niezależnie i przywracane do dowolnego systemu zgodnego z bazą danych Postgres.

Dla migracji, która utrzymuje środowisko docelowe na bieżąco do momentu przełączenia, użyj zamiast tego replikacji logicznej. Aby porównać sposoby przenoszenia danych do i z Lakebase, zobacz Przenoszenie danych do i z Lakebase.

Warunki wstępne

Przed rozpoczęciem upewnij się, że:

  • pg_dump i pg_restore są zainstalowane. Możesz sprawdzić, uruchamiając polecenie pg_dump -V.
  • Używasz najnowszych wersji pg_dump i pg_restore.
  • Wersja klienta jest zgodna z wersją bazy danych Postgres projektu Lakebase.
  • Projekt usługi Lakebase ze skonfigurowaną rolą Postgres

Uwaga / Notatka

Zalecamy używanie natywnego uwierzytelniania hasłem Postgres podczas korzystania z pg_dumppg_restore. Natywne hasła Postgres nie wygasają co godzinę, tak jak tokeny OAuth, dzięki czemu są lepiej dostosowane do operacji tworzenia kopii zapasowych i przywracania. Zobacz Omówienie uwierzytelniania , aby uzyskać szczegółowe informacje o metodach uwierzytelniania.

Instalowanie pg_dump i pg_restore

Jeśli nie masz zainstalowanych lokalnie narzędzi pg_dump i pg_restore, zainstaluj je na preferowanej platformie.

Windows: Zainstaluj program PostgreSQL przy użyciu oficjalnego instalatora z postgresql.org. Narzędzia pg_dump i pg_restore są instalowane domyślnie i można je znaleźć w katalogu bin postgreSQL.

Macos: Zainstaluj program PostgreSQL przy użyciu oprogramowania Homebrew:

brew install postgresql

Linux (Ubuntu/Debian):

sudo apt-get install postgresql-client

Docker: Uruchom pg_dump używając kontenera Docker PostgreSQL:

docker run --rm postgres:17 pg_dump --version

Tworzenie kopii zapasowej przy użyciu pg_dump

Aby utworzyć lokalnie kopię zapasową bazy danych:

  1. Przejdź do aplikacji Lakebase, klikając przełącznik aplikacji w prawym górnym rogu przestrzeni roboczej.

  2. Wybierz projekt.

  3. Kliknij przycisk Połącz, aby otworzyć modalne połączenie z bazą danych.

  4. Wybierz rolę Postgres z listy rozwijanej (zalecamy użycie natywnej roli Postgres z uwierzytelnianiem haseł).

  5. Skopiuj parametry połączenia.

    Parametry połączenia wyglądają mniej więcej tak:

    postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require
    
  6. Utwórz kopię zapasową bazy danych Lakebase, uruchamiając następujące pg_dump polecenie:

    pg_dump -Fc -v -d "<lakebase_database_connection_string>" -f <dump_file_name>
    

    Po dodaniu parametrów połączenia bazy danych Lakebase i nazwie pliku zrzutu polecenie wygląda następująco:

    pg_dump -Fc -v -d "postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require" -f mydatabase.bak
    

argumenty poleceń pg_dump

Polecenie pg_dump zawiera następujące argumenty:

  • -Fc: wysyła dane wyjściowe do archiwum w niestandardowym formacie, które jest odpowiednie dla danych wejściowych do pg_restore.
  • -v: działa pg_dump w trybie szczegółowym, pozwalając na monitorowanie przebiegu operacji.
  • -d: określa parametry połączenia dla bazy danych Lakebase.
  • -f <dump_file_name>: nazwa pliku zrzutu. Może to być dowolna wybrana nazwa (na przykład mydumpfile.bak).

Przywracanie kopii zapasowej przy użyciu pg_restore

Aby przywrócić bazę danych z pliku kopii zapasowej utworzonego przy użyciu pg_restore, użyj narzędzia pg_dump.

  1. Utwórz nowy projekt Lakebase.

  2. Utwórz bazę danych o tej samej nazwie co utworzona kopia zapasowa.

  3. Przejdź do aplikacji Lakebase, klikając przełącznik aplikacji w prawym górnym rogu przestrzeni roboczej.

  4. Wybierz projekt i kliknij przycisk Połącz , aby otworzyć modalne połączenie z bazą danych.

  5. Wybierz rolę Postgres z listy rozwijanej (zalecamy użycie natywnej roli Postgres z uwierzytelnianiem haseł).

  6. Skopiuj parametry połączenia.

    Parametry połączenia wyglądają mniej więcej tak:

    postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require
    
  7. Przywróć dane do docelowej bazy danych w usłudze Lakebase za pomocą polecenia pg_restore:

    pg_restore -v -d "<lakebase_database_connection_string>" <dump_file_name>
    

    Po dodaniu parametrów połączenia bazy danych Lakebase i nazwy pliku zrzutu polecenie wygląda następująco:

    pg_restore -v -d "postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require" mydatabase.bak
    

argumenty polecenia pg_restore

Polecenie pg_restore zawiera następujące argumenty:

  • -v: działa pg_restore w trybie szczegółowym, co pozwala monitorować, co się dzieje podczas operacji przywracania.
  • -d: Określa bazę danych Lakebase do nawiązania połączenia. Wartość jest ciągiem połączenia do bazy danych Lakebase.
  • <dump_file_name>: nazwa pliku zrzutu, który utworzyłeś za pomocą pg_dump polecenia.

Kompletny przykład

W poniższym przykładzie pokazano, jak dane są zrzucane ze źródłowej bazy danych o nazwie databricks_postgres w jednym projekcie Lakebase i przywracane do bazy danych databricks_postgres w innym projekcie Lakebase.

Przed wykonaniem tej procedury:

  • Utworzono nowy projekt usługi Lakebase dla docelowej bazy danych (która zawiera domyślną databricks_postgres bazę danych)
  • Zebrano parametry połączenia dla źródłowych i docelowych baz danych:
    • Źródła:postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require
    • Docelowy:postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require

Procedura tworzenia kopii zapasowej i przywracania:

# Create a directory for the dump
mkdir mydump && cd mydump

# Create the backup
pg_dump -Fc -v -d "postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require" -f mydatabase.bak

# Verify the backup file was created
ls
mydatabase.bak

# Restore the backup to the destination database
pg_restore -v -d "postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require" mydatabase.bak

Zrzuć tylko schemat

Zrzut samego schematu kopiuje definicje tabel, indeksy i ograniczenia bez żadnych danych wierszowych. Używaj go, gdy potrzebujesz struktury bazy danych w nowym obiekcie docelowym, ale nie jej zawartości.

Najczęstszym powodem jest przygotowanie docelowej bazy danych do replikacji logicznej. Replikacja logiczna kopiuje dane, a nie schemat: tabele w publikacji muszą już istnieć na subskrybentze o tych samych nazwach i kolumnach przed rozpoczęciem replikacji, a każda docelowa tabela musi być pusta, aby początkowa kopia nie zawiodła na zduplikowanych kluczach. Zrzut i ponowne wczytanie samego schematu jest zazwyczaj szybsze i mniej podatne na błędy niż ręczne odtwarzanie tabel.

  1. Zrzuć tylko schemat ze źródłowej bazy danych. Opcja --schema-only wyklucza dane wierszy, --no-owner pomija polecenia właściciela dla ról, które mogą nie istnieć w systemie docelowym, --no-privileges pomija nadania uprawnień, które mogą nie mieć zastosowania w systemie docelowym, a --no-publications i --no-subscriptions utrzymują konfigurację replikacji źródła poza celem:

    pg_dump --schema-only --no-owner --no-privileges --no-publications --no-subscriptions "<source_connection_string>" > schema_dump.sql
    
  2. Przejrzyj plik zrzutu i skomentuj wszystkie instrukcje, których system docelowy nie obsługuje, takie jak parametry lub rozszerzenia specyficzne dla dostawcy. Skomentuj wiersz, dodając -- na początku.

    Jeśli replikujesz duży zbiór danych, rozważ także usunięcie instrukcji CREATE INDEX przed załadowaniem schematu. Budowanie indeksów podczas początkowej kopii replikacyjnej spowalnia ją. Zapisz usunięte polecenia i dodaj indeksy z powrotem po zakończeniu początkowej kopii.

  3. Załaduj schemat do docelowej bazy danych psql:

    psql "<target_connection_string>" < schema_dump.sql
    

    Potwierdź, że tabele zostały stworzone:

    psql "<target_connection_string>" -c "\dt"