Postgres pg_dump & pg_restore

Det här avsnittet beskriver hur du skapar en säkerhetskopia av din Lakebase-databas med postgres-verktyget och hur du återställer pg_dump en säkerhetskopia med hjälp av pg_restore.

När du ska använda pg_dump & pg_restore

Använd pg_dump och pg_restore för krav på haveriberedskap och affärskontinuitet, eller när du behöver lagra fullständiga säkerhetskopior utanför Lakebase. Den här metoden tillhandahåller fullständiga databasexporter som kan lagras oberoende av varandra och återställas till alla Postgres-kompatibla system.

För en migration som håller målet aktuellt tills du växlar över, använd logisk replikering istället. För att jämföra sätten att flytta data in och ut ur Lakebase, se Flytta data in och ut ur Lakebase.

Förutsättningar

Innan du börjar kontrollerar du att:

  • pg_dump och pg_restore är installerade. Du kan verifiera genom att köra pg_dump -V.
  • Du använder de senaste versionerna av pg_dump och pg_restore.
  • Klientversionen matchar Lakebase-projektets Postgres-version.
  • Ett Lakebase-projekt med en Postgres-roll konfigurerad

Anmärkning

Vi rekommenderar att du använder inbyggd Postgres-lösenordsautentisering när du använder pg_dump och pg_restore. Interna Postgres-lösenord upphör inte att gälla varje timme som OAuth-token, vilket gör dem bättre lämpade för säkerhetskopierings- och återställningsåtgärder. Mer information om autentiseringsmetoder finns i Översikt över autentisering .

Installera pg_dump och pg_restore

Om du inte har verktygen pg_dump och pg_restore installerade lokalt installerar du dem på önskad plattform.

Windows: Installera PostgreSQL med hjälp av det officiella installationsprogrammet från postgresql.org. Verktygen pg_dump och pg_restore installeras som standard och finns i postgreSQL-bin-katalogen.

Macos: Installera PostgreSQL med Homebrew:

brew install postgresql

Linux (Ubuntu/Debian):

sudo apt-get install postgresql-client

Docker: Kör pg_dump med en Postgres Docker-container:

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

Skapa en säkerhetskopia med pg_dump

Så här skapar du en databassäkerhetskopia lokalt:

  1. Navigera till Lakebase-appen genom att klicka på appväxlaren uppe i högra hörnet av din arbetsplats.

  2. Välj ditt projekt.

  3. Klicka på Anslut för att öppna databasens anslutningsmodal.

  4. Välj en Postgres-roll i listrutan (vi rekommenderar att du använder en intern Postgres-roll med lösenordsautentisering).

  5. Kopiera anslutningssträng.

    Anslutningssträngen ser ut ungefär så här:

    postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require
    
  6. Skapa en säkerhetskopia av lakebase-databasen genom att köra följande pg_dump kommando:

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

    När du har lagt till anslutningssträngen för Lakebase-databasen och ett dumpfilnamn ser kommandot ut så här:

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

pg_dump kommandorargument

Kommandot pg_dump innehåller följande argument:

  • -Fc: Skickar utdata till ett arkiv i anpassat format som är lämpligt för indata till pg_restore.
  • -v: Kör pg_dump i utförligt läge, så att du kan övervaka vad som händer under dumpåtgärden.
  • -d: Anger anslutningssträngen för din Lakebase-databas.
  • -f <dump_file_name>: Namnet på dumpfilen. Det kan vara valfritt namn du väljer (till exempel mydumpfile.bak).

Återställa en säkerhetskopia med pg_restore

Så här återställer du en databas med hjälp av pg_restore verktyget från en säkerhetskopia som skapats med hjälp av pg_dump:

  1. Skapa ett nytt Lakebase-projekt.

  2. Skapa en databas med samma namn som den som du säkerhetskopierade.

  3. Navigera till Lakebase-appen genom att klicka på appväxlaren uppe i högra hörnet av din arbetsplats.

  4. Välj projektet och klicka på Anslut för att öppna databasens anslutningsmodal.

  5. Välj en Postgres-roll i listrutan (vi rekommenderar att du använder en intern Postgres-roll med lösenordsautentisering).

  6. Kopiera anslutningssträng.

    Anslutningssträngen ser ut ungefär så här:

    postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require
    
  7. Återställ dina data till måldatabasen i Lakebase med pg_restore:

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

    När du har lagt till lakebase-databasanslutningssträngen och dumpfilnamnet ser kommandot ut så här:

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

pg_restore kommandoargument

Kommandot pg_restore innehåller följande argument:

  • -v: Körs pg_restore i utförligt läge så att du kan övervaka vad som händer under återställningsåtgärden.
  • -d: Anger den Lakebase-databas som ska anslutas till. Värdet är en Lakebase-databasanslutningssträng.
  • <dump_file_name>: Namnet på dumpfilen som du skapade med pg_dump.

Fullständigt exempel

I följande exempel visas hur data dumpas från en källdatabas med namnet databricks_postgres i ett Lakebase-projekt och återställs till en databas i ett databricks_postgres annat Lakebase-projekt.

Innan du utför den här proceduren:

  • Ett nytt Lakebase-projekt skapades för måldatabasen (som innehåller standarddatabasen databricks_postgres )
  • Anslutningssträngar för käll- och måldatabaserna samlades in:
    • Källkod:postgresql://role_name:password@ep-source-abc-123.databricks.com/databricks_postgres?sslmode=require
    • Destination:postgresql://role_name:password@ep-destination-xyz-456.databricks.com/databricks_postgres?sslmode=require

Säkerhetskopierings- och återställningsprocedur:

# 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

Exportera bara schemat

En schema-endast dump kopierar tabelldefinitioner, index och begränsningar utan någon raddata. Använd det när du behöver strukturen för en databas i en ny målmiljö men inte dess innehåll.

Den vanligaste anledningen är att förbereda en måldatabas för logisk replikering. Logisk replikering kopierar data, inte schema: tabellerna i en publikation måste redan finnas hos prenumeranten med samma namn och kolumner innan replikeringen startar, och varje måltabell måste vara tom så att den initiala kopian inte misslyckas på dubblettnycklar. En schema-enbart dump och omladdning är vanligtvis snabbare och mindre felbenägen än att återskapa tabellerna för hand.

  1. Dumpa bara schemat från källdatabasen. Alternativet --schema-only exkluderar raddata, --no-owner hoppar över ägarskapsuttalanden för roller som kanske inte finns på målet, --no-privileges hoppar över beviljanden som kanske inte gäller för målet, och --no-publications och --no-subscriptions håller källans replikeringskonfiguration utanför målet:

    pg_dump --schema-only --no-owner --no-privileges --no-publications --no-subscriptions "<source_connection_string>" > schema_dump.sql
    
  2. Granska dumpfilen och kommentera bort eventuella satser som målet inte stödjer, såsom leverantörsspecifika parametrar eller tillägg. Kommentera bort en rad genom att lägga till -- i början.

    Om du replikerar en stor datamängd bör du också överväga att ta bort CREATE INDEX-satserna innan du laddar schemat. Att bygga index under den initiala replikeringskopian saktar ner det. Spara de instruktioner du tar bort och lägg till indexen igen efter att den inledande kopieringen är klar.

  3. Ladda schemat till måldatabasen med psql:

    psql "<target_connection_string>" < schema_dump.sql
    

    Bekräfta att tabellerna skapades:

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