Postgres pg_dump & pg_restore

In dit onderwerp wordt beschreven hoe u een back-up van uw Lakebase-database maakt met behulp van het Postgres-hulpprogramma pg_dump en hoe u een back-up herstelt met behulp van pg_restore.

Wanneer gebruikt u pg_dump &pg_restore

Gebruik pg_dump en pg_restore voor vereisten voor herstel na noodgevallen en bedrijfscontinuïteit, of wanneer u volledige back-ups buiten Lakebase moet opslaan. Deze methode biedt volledige databaseexports die onafhankelijk kunnen worden opgeslagen en kunnen worden hersteld naar elk postgres-compatibel systeem.

Voor een migratie die het doel actueel houdt totdat je overschakelt, gebruik dan logische replicatie. Om de manieren te vergelijken waarop data in en uit Lakebase wordt verplaatst, zie Gegevens verplaatsen in en uit Lakebase.

Voorwaarden

Voordat u begint, moet u ervoor zorgen dat:

  • pg_dump en pg_restore zijn geïnstalleerd. U kunt dit controleren door uit te voeren pg_dump -V.
  • U gebruikt de nieuwste versies van pg_dump en pg_restore.
  • De clientversie komt overeen met de Postgres-versie van uw Lakebase-project.
  • Een Lakebase-project met een Postgres-rol geconfigureerd

Opmerking

We raden u aan systeemeigen Postgres-wachtwoordverificatie te gebruiken bij het gebruik van pg_dump en pg_restore. Systeemeigen Postgres-wachtwoorden verlopen niet elk uur, zoals OAuth-tokens, waardoor ze beter geschikt zijn voor back-up- en herstelbewerkingen. Zie het overzicht van verificatie voor meer informatie over verificatiemethoden.

Pg_dump en pg_restore installeren

Als u de pg_dump hulpprogramma's pg_restore niet lokaal hebt geïnstalleerd, installeert u deze op uw voorkeursplatform.

Windows: Installeer PostgreSQL met behulp van het officiële installatieprogramma van postgresql.org. De pg_dump hulpprogramma's en pg_restore hulpprogramma's worden standaard geïnstalleerd en zijn te vinden in de map postgreSQL bin.

Macos: PostgreSQL installeren met Homebrew:

brew install postgresql

Linux (Ubuntu/Debian):

sudo apt-get install postgresql-client

Docker: Uitvoeren pg_dump met behulp van een Postgres Docker-container:

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

Een back-up maken met pg_dump

Een back-up van een database lokaal maken:

  1. Navigeer naar de Lakebase-app door op de app-switcher rechtsboven in je werkruimte te klikken.

  2. Selecteer uw project.

  3. Klik op Verbinding maken om de databaseverbinding modaal te openen.

  4. Selecteer een Postgres-rol in de vervolgkeuzelijst (we raden u aan een systeemeigen Postgres-rol met wachtwoordverificatie te gebruiken).

  5. Kopieer de verbindingsreeks.

    Uw verbindingsreeks ziet er ongeveer als volgt uit:

    postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require
    
  6. Maak een back-up van uw Lakebase-database door de volgende pg_dump opdracht uit te voeren:

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

    Nadat u uw Lakebase-databaseverbindingsreeks en een dumpbestandsnaam hebt toegevoegd, ziet uw opdracht er als volgt uit:

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

pg_dump opdrachtargumenten

De pg_dump opdracht bevat deze argumenten:

  • -Fc: verzendt de uitvoer naar een archief met aangepaste indeling dat geschikt is voor invoer in pg_restore.
  • -v: Voert pg_dump uit in de verbose modus, zodat u kunt controleren wat er gebeurt tijdens de dumpbewerking.
  • -d: Hiermee geeft u de verbindingsreeks voor uw Lakebase-database op.
  • -f <dump_file_name>: de naam van het dumpbestand. Dit kan elke naam zijn die u kiest (bijvoorbeeld mydumpfile.bak).

Een back-up herstellen met pg_restore

Een database herstellen met behulp van het pg_restore hulpprogramma van een back-upbestand dat is gemaakt met behulp van pg_dump:

  1. Maak een nieuw Lakebase-project.

  2. Maak een database met dezelfde naam als de database waarvan u een back-up hebt gemaakt.

  3. Navigeer naar de Lakebase-app door op de app-switcher rechtsboven in je werkruimte te klikken.

  4. Selecteer uw project en klik op Verbinding maken om de databaseverbinding modaal te openen.

  5. Selecteer een Postgres-rol in de vervolgkeuzelijst (we raden u aan een systeemeigen Postgres-rol met wachtwoordverificatie te gebruiken).

  6. Kopieer de verbindingsreeks.

    Uw verbindingsreeks ziet er ongeveer als volgt uit:

    postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require
    
  7. Herstel uw gegevens naar de doeldatabase in Lakebase met pg_restore:

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

    Nadat u uw Lakebase-databaseverbindingsreeks en de naam van het dumpbestand hebt toegevoegd, ziet uw opdracht er als volgt uit:

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

pg_restore opdrachtargumenten

De pg_restore opdracht bevat deze argumenten:

  • -v: Voert pg_restore uit in gedetailleerde modus, zodat u kunt controleren wat er gebeurt tijdens de herstelbewerking.
  • -d: hiermee geeft u de Lakebase-database op waarmee verbinding moet worden gemaakt. De waarde is een Lakebase-databaseverbindingsreeks.
  • <dump_file_name>: De naam van het dumpbestand dat u met pg_dump hebt gemaakt.

Volledig voorbeeld

In het volgende voorbeeld ziet u hoe gegevens worden gedumpt uit een brondatabase met de naam databricks_postgres in één Lakebase-project en worden hersteld naar een database in een databricks_postgres ander Lakebase-project.

Voordat u deze procedure uitvoert:

  • Er is een nieuw Lakebase-project gemaakt voor de doeldatabase (inclusief de standaarddatabase databricks_postgres )
  • Verbindingsreeksen voor de bron- en doeldatabases zijn verzameld:
    • Bron:postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require
    • Bestemming:postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require

Procedure voor back-up en herstel:

# 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

Dump alleen het schema

Een schema-only dump kopieert tabeldefinities, indexen en constraints zonder enige rijgegevens. Gebruik het wanneer je de structuur van een database nodig hebt voor een nieuw doelsysteem, maar niet de inhoud ervan.

De meest voorkomende reden is het voorbereiden van een doeldatabase voor logische replicatie. Logische replicatie kopieert data, niet schema: de tabellen in een publicatie moeten al bestaan op de abonnee met dezelfde namen en kolommen voordat replicatie begint, en elke doeltabel moet leeg zijn zodat de initiële kopie niet faalt op dubbele sleutels. Een schema-only dump en herladen is meestal sneller en minder foutgevoelig dan het handmatig opnieuw maken van de tabellen.

  1. Dump alleen het schema uit de brondatabase. De --schema-only optie sluit rijgegevens uit, --no-owner slaat eigendomsverklaringen over voor rollen die mogelijk niet op het doel bestaan, --no-privileges slaat toekenningen over die mogelijk niet op het doelwit van toepassing zijn, en --no-publications--no-subscriptions houden de replicatie-opzet van de bron buiten het doelwit:

    pg_dump --schema-only --no-owner --no-privileges --no-publications --no-subscriptions "<source_connection_string>" > schema_dump.sql
    
  2. Bekijk het dumpbestand en laat eventuele statements die het doelsysteem niet ondersteunt, zoals provider-specifieke parameters of extensies uit. Commentarieer een regel uit door -- aan het begin toe te voegen.

    Als je een grote dataset repliceert, overweeg dan ook om de CREATE INDEX statements te verwijderen voordat je het schema laadt. Het opbouwen van indexen tijdens de eerste replicatiekopie vertraagt deze. Sla de statements die je verwijdert op en voeg de indexen weer toe nadat de eerste kopie is voltooid.

  3. Laad het schema in de doeldatabase met psql:

    psql "<target_connection_string>" < schema_dump.sql
    

    Bevestig dat de tabellen zijn aangemaakt:

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