Postgres pg_dump und pg_restore

In diesem Thema wird beschrieben, wie Sie mithilfe des Postgres-Dienstprogramms pg_dump eine Sicherung Ihrer Lakebase-Datenbank erstellen und wie Sie mithilfe von pg_restore eine Sicherung wiederherstellen.

Wann man pg_dump und pg_restore verwenden sollte

Verwenden Sie pg_dump und pg_restore für Anforderungen an die Notfallwiederherstellung und Betriebskontinuität, oder um vollständige Backups außerhalb von Lakebase zu speichern. Diese Methode stellt vollständige Datenbankexporte bereit, die unabhängig gespeichert und in jedem Postgres-kompatiblen System wiederhergestellt werden können.

Für eine Migration, die das Zielsystem bis zur Umschaltung aktuell hält, verwenden Sie stattdessen logische Replikation. Um die Möglichkeiten zu vergleichen, Daten in und aus Lakebase zu bewegen, siehe Daten in und aus Lakebase bewegen.

Voraussetzungen

Bevor Sie beginnen, stellen Sie folgendes sicher:

  • pg_dump und pg_restore werden installiert. Sie können überprüfen, indem Sie folgendes ausführen pg_dump -V:
  • Sie verwenden die neuesten Versionen von pg_dump und pg_restore.
  • Die Clientversion entspricht der Postgres-Version Ihres Lakebase-Projekts.
  • Ein Lakebase-Projekt mit konfigurierter Postgres-Rolle

Hinweis

Wir empfehlen die Verwendung der systemeigenen Postgres-Kennwortauthentifizierung bei Verwendung pg_dump und pg_restore. Native Postgres-Kennwörter laufen nicht stündlich ab wie OAuth-Token, wodurch sie besser für Sicherungs- und Wiederherstellungsvorgänge geeignet sind. Details zu Authentifizierungsmethoden finden Sie in der Übersicht über die Authentifizierung.

Installieren von pg_dump und pg_restore

Wenn die pg_dump und pg_restore Dienstprogramme nicht lokal installiert sind, installieren Sie sie auf Ihrer bevorzugten Plattform.

Windows: Installieren Sie PostgreSQL mit dem offiziellen Installationsprogramm von postgresql.org. Die Dienstprogramme pg_dump und pg_restore sind standardmäßig installiert und befinden sich im Verzeichnis des PostgreSQL-Bin.

Macos: Installieren Sie PostgreSQL mit Homebrew:

brew install postgresql

Linux (Ubuntu/Debian):

sudo apt-get install postgresql-client

Docker: Ausführen pg_dump mit einem Docker-Container von Postgres:

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

Erstellen einer Sicherung mit pg_dump

So erstellen Sie eine Datenbanksicherung lokal:

  1. Navigiere zur Lakebase-App, indem du oben rechts in deinem Arbeitsbereich auf den App-Wechseler klickst.

  2. Wählen Sie Ihr Projekt aus.

  3. Klicken Sie auf "Verbinden" , um die modale Datenbankverbindung zu öffnen.

  4. Wählen Sie eine Postgres-Rolle aus der Dropdownliste aus (wir empfehlen die Verwendung einer nativen Postgres-Rolle mit kennwortauthentifizierung).

  5. Kopieren Sie die Verbindungszeichenfolge.

    Ihre Verbindungszeichenfolge sieht ähnlich wie folgt aus:

    postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require
    
  6. Erstellen Sie eine Sicherung Ihrer Lakebase-Datenbank, indem Sie den folgenden pg_dump Befehl ausführen:

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

    Nachdem Sie die Lakebase-Datenbankverbindungszeichenfolge und einen Dumpdateinamen hinzugefügt haben, sieht ihr Befehl wie folgt aus:

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

pg_dump Befehlsargumente

Der pg_dump Befehl enthält die folgenden Argumente:

  • -Fc: Sendet die Ausgabe an ein benutzerdefiniertes Formatarchive, das als Eingabe in pg_restore geeignet ist.
  • -v: Führt pg_dump im ausführlichen Modus aus, sodass Sie den Dumpvorgang überwachen können.
  • -d: Gibt die Verbindungszeichenfolge für Ihre Lakebase-Datenbank an.
  • -f <dump_file_name>: Der Dateiname des Dumps. Dies kann ein beliebiger Name sein, den Sie auswählen, wie z. B. mydumpfile.bak.

Wiederherstellen einer Sicherung mit pg_restore

So stellen Sie eine Datenbank mithilfe des Hilfsprogramms pg_restore aus einer Sicherungsdatei wieder her, die mit pg_dump erstellt wurde:

  1. Erstellen Sie ein neues Lakebase-Projekt.

  2. Erstellen Sie eine Datenbank mit demselben Namen wie die Datenbank, die Sie gesichert haben.

  3. Navigiere zur Lakebase-App, indem du oben rechts in deinem Arbeitsbereich auf den App-Wechseler klickst.

  4. Wählen Sie Ihr Projekt aus, und klicken Sie auf "Verbinden" , um die modale Datenbankverbindung zu öffnen.

  5. Wählen Sie eine Postgres-Rolle aus der Dropdownliste aus (wir empfehlen die Verwendung einer nativen Postgres-Rolle mit kennwortauthentifizierung).

  6. Kopieren Sie die Verbindungszeichenfolge.

    Ihre Verbindungszeichenfolge sieht ähnlich wie folgt aus:

    postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require
    
  7. Stellen Sie Ihre Daten in der Zieldatenbank von Lakebase mit pg_restore wieder her:

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

    Nachdem Sie die Lakebase-Datenbankverbindungszeichenfolge und den Dumpdateinamen hinzugefügt haben, sieht ihr Befehl wie folgt aus:

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

pg_restore Befehlsargumente

Der pg_restore Befehl enthält die folgenden Argumente:

  • -v: Führt pg_restore im ausführlichen Modus aus, sodass Sie den Wiederherstellungsvorgang überwachen können.
  • -d: Gibt die Lakebase-Datenbank an, mit der eine Verbindung hergestellt werden soll. Der Wert ist eine Lakebase-Datenbankverbindungszeichenfolge.
  • <dump_file_name>: Der Name der Dumpdatei, mit pg_dumpder Sie erstellt haben.

Vollständiges Beispiel

Das folgende Beispiel zeigt, wie Daten aus einer Quelldatenbank namens databricks_postgres in einem Lakebase-Projekt exportiert und in einer databricks_postgres-Datenbank in einem anderen Lakebase-Projekt wiederhergestellt werden.

Bevor Sie dieses Verfahren ausführen, gehen Sie wie folgt vor:

  • Für die Zieldatenbank (einschließlich der Standarddatenbank databricks_postgres ) wurde ein neues Lakebase-Projekt erstellt.
  • Verbindungszeichenfolgen für die Quell- und Zieldatenbanken wurden gesammelt:
    • Quelle:postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require
    • Ziel:postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require

Sicherungs- und Wiederherstellungsprozedur:

# 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

Nur das Schema dumpen

Ein reiner Schema-Dump kopiert Tabellendefinitionen, Indizes und Constraints ohne Zeilendaten. Nutze es, wenn du die Struktur einer Datenbank in einem neuen Ziel brauchst, aber nicht ihren Inhalt.

Der häufigste Grund ist, eine Zieldatenbank für die logische Replikation vorzubereiten. Logische Replikation kopiert Daten, kein Schema: Die Tabellen in einer Publikation müssen bereits beim Abonnenten mit denselben Namen und Spalten existieren, bevor die Replikation beginnt, und jede Zieltabelle muss leer sein, damit die Anfangskopie bei doppelten Schlüsseln nicht fehlschlägt. Ein reines Schema-Dump und -Nachladen ist in der Regel schneller und weniger fehleranfällig als das manuelle Nacherstellen der Tabellen.

  1. Exportiere nur das Schema aus der Quelldatenbank. Die --schema-only Option schließt Zeilendaten aus, --no-owner überspringt Eigentümeranweisungen für Rollen, die auf dem Ziel möglicherweise nicht existieren, und --no-privileges überspringt Berechtigungen, die möglicherweise nicht für das Ziel gelten:

    pg_dump --schema-only --no-owner --no-privileges "<source_connection_string>" > schema_dump.sql
    
  2. Überprüfen Sie die Dump-Datei und kommentieren Sie alle Anweisungen aus, die das Ziel nicht unterstützt, wie anbieterspezifische Parameter oder Erweiterungen. Kommentiere eine Zeile aus, indem du am Anfang -- hinzufügst.

    Wenn du einen großen Datensatz replizierst, solltest du auch in Erwägung ziehen, die CREATE INDEX Statements vor dem Laden des Schemas zu entfernen. Das Erstellen von Indizes während der ersten Replikationskopie verlangsamt sie. Speichere die entfernten Statements und füge die Indizes nach Abschluss der ersten Kopie wieder hinzu.

  3. Laden Sie das Schema mit psql in die Zieldatenbank:

    psql "<target_connection_string>" < schema_dump.sql
    

    Bestätigen Sie, dass die Tabellen erstellt wurden:

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