Migrera postgreSQL-databasen med hjälp av dump och återställning

GÄLLER FÖR: Azure Database for PostgreSQL – Azure Database for PostgreSQL för enskild server – flexibel server

Du kan använda pg_dump för att extrahera en PostgreSQL-databas till en dumpfil. Metoden för att återställa databasen beror på formatet på den dump du väljer. Om din dump tas med det oformaterade formatet (vilket är standard -Fp, så inget specifikt alternativ behöver anges), är det enda alternativet för att återställa det genom att använda psql, eftersom det matar ut en oformaterad textfil. För de andra tre dumpmetoderna: anpassad, katalog och tjära bör pg_restore användas.

Viktigt!

Instruktionerna och kommandona i den här artikeln är utformade för att köras i bash-terminaler. Detta omfattar miljöer som Windows-undersystem för Linux (WSL), Azure Cloud Shell och andra bash-kompatibla gränssnitt. Se till att du använder en bash-terminal för att följa stegen och köra kommandona som beskrivs i den här guiden. Om du använder en annan typ av terminal- eller gränssnittsmiljö kan det leda till skillnader i kommandobeteendet och kanske inte ger de avsedda resultaten.

I den här artikeln fokuserar vi på vanliga (standard) och katalogformat. Katalogformatet är användbart eftersom du kan använda flera kärnor för bearbetning, vilket avsevärt kan förbättra effektiviteten, särskilt för stora databaser.

Azure-portalen effektiviserar den här processen via bladet Anslut genom att erbjuda förkonfigurerade kommandon som är skräddarsydda för servern, med värden som ersätts med dina användardata. Observera att bladet Anslut endast är tillgängligt för Azure Database for PostgreSQL – flexibel server och inte för enskild server. Så här kan du använda den här funktionen:

  1. Åtkomst till Azure-portalen: Gå först till Azure-portalen och välj bladet Anslut.

    Screenshot showing the placement of Connect blade in Azure portal.

  2. Välj din databas: På bladet Anslut hittar du en listruta över dina databaser. Välj den databas som du vill utföra en dump från.

    Screenshot showing the dropdown where specific database can be chosen.

  3. Välj lämplig metod: Beroende på databasens storlek kan du välja mellan två metoder:

    • pg_dump & psql – med hjälp av enstaka textfil: Perfekt för mindre databaser använder det här alternativet en enda textfil för dump- och återställningsprocessen.
    • pg_dump & pg_restore – med flera kärnor: För större databaser är den här metoden mer effektiv eftersom den använder flera kärnor för att hantera dump- och återställningsprocessen.

    Screenshot showing two possible dump methods.

  4. Kopiera och klistra in kommandon: Portalen ger dig redo att använda pg_dump och psql eller pg_restore kommandon. Dessa kommandon har värden som redan har ersatts enligt den server och databas som du har valt. Kopiera och klistra in dessa kommandon.

Förutsättningar

Om du använder en enskild server eller inte har åtkomst till portalen för flexibel server läser du igenom den här dokumentationssidan. Den innehåller information som liknar det som visas på bladet Anslut för flexibel server på portalen.

Om du vill gå igenom den här instruktionsguiden behöver du:

  • En Azure Database for PostgreSQL-server, inklusive brandväggsregler för att tillåta åtkomst.
  • pg_dump, psql, pg_restore och pg_dumpall om du vill migrera med roller och behörigheter, kommandoradsverktyg installerade.
  • Bestäm platsen för dumpen: Välj den plats som du vill utföra dumpen från. Det kan göras från olika platser, till exempel en separat virtuell dator, Cloud Shell (där kommandoradsverktygen redan är installerade, men kanske inte är i rätt version, så kontrollera alltid versionen med till exempel psql --version), eller din egen bärbara dator. Tänk alltid på avståndet och svarstiden mellan PostgreSQL-servern och platsen där du kör dumpen eller återställningen.

Viktigt!

Det är viktigt att använda verktygen pg_dump, pg_restorepsqloch pg_dumpall som antingen har samma huvudversion eller en högre huvudversion än databasservern som du exporterar data från eller importerar data till. Om du inte gör det kan det leda till misslyckad datamigrering. Om målservern har en högre huvudversion än källservern använder du verktyg som antingen har samma huvudversion eller högre än målservern.

Kommentar

Det är viktigt att vara medveten om att pg_dump det bara kan exportera en databas i taget. Den här begränsningen gäller oavsett vilken metod du har valt, oavsett om den använder en singularfil eller flera kärnor.

Dumpa användare och roller med pg_dumpall -r

pg_dump används för att extrahera en PostgreSQL-databas till en dumpfil. Det är dock viktigt att förstå att pg_dump inte dumpar roller eller användardefinitioner, eftersom dessa betraktas som globala objekt i PostgreSQL-miljön. För en omfattande migrering, inklusive användare och roller, måste du använda pg_dumpall -r. Med det här kommandot kan du samla in all roll- och användarinformation från PostgreSQL-miljön. Om du migrerar i databaser på samma server kan du hoppa över det här steget och gå vidare till avsnittet Skapa en ny databas .

pg_dumpall -r -h <server name> -U <user name> > roles.sql

Om du till exempel har en server med namnet mydemoserver och en användare med namnet myuser kör du följande kommando:

pg_dumpall -r -h mydemoserver.postgres.database.azure.com -U myuser > roles.sql

Om du använder en enskild server innehåller ditt användarnamn komponenten servernamn. Använd därför i stället för myusermyuser@mydemoserver.

Dumpning av roller från en flexibel server

I en miljö med flexibel server innebär förbättrade säkerhetsåtgärder att användarna inte har åtkomst till tabellen pg_authid, där rolllösenord lagras. Den här begränsningen påverkar hur du utför en rolldumpning eftersom standardkommandot pg_dumpall -r försöker komma åt den här tabellen för lösenord och misslyckas på grund av brist på behörighet.

När du dumpar roller från en flexibel server är det viktigt att inkludera alternativet --no-role-passwords i kommandot pg_dumpall . Det här alternativet förhindrar pg_dumpall att du försöker komma åt pg_authid tabellen, som den inte kan läsa på grund av säkerhetsbegränsningar.

Om du vill dumpa roller från en flexibel server använder du följande kommando:

pg_dumpall -r --no-role-passwords -h <server name> -U <user name> > roles.sql

Om du till exempel har en server med namnet mydemoserver, en användare med namnet myuser, kör du följande kommando:

pg_dumpall -r --no-role-passwords -h mydemoserver.postgres.database.azure.com -U myuser > roles.sql

Rensa rollerdumpen

När du migrerar utdatafilen roles.sql kan det finnas vissa roller och attribut som inte är tillämpliga eller tillåtna i den nya miljön. Här är vad du behöver tänka på:

  • Ta bort attribut som bara kan anges av superanvändare: Om du migrerar till en miljö där du inte har superanvändarbehörighet tar du bort attribut som NOSUPERUSER och NOBYPASSRLS från rolldumpningen.

  • Exkludera tjänstspecifika användare: Exkludera användare av en enskild servertjänst, till exempel azure_superuser eller azure_pg_admin. Dessa är specifika för tjänsten och skapas automatiskt i den nya miljön.

Använd följande sed kommando för att rensa rolldumpningen:

sed -i '/azure_superuser/d; /azure_pg_admin/d; /azuresu/d; /^CREATE ROLE replication/d; /^ALTER ROLE replication/d; /^ALTER ROLE/ {s/NOSUPERUSER//; s/NOBYPASSRLS//;}' roles.sql

Det här kommandot tar bort rader som innehåller azure_superuser, azure_pg_admin, azuresu, rader som börjar med CREATE ROLE replication och ALTER ROLE replicationoch tar bort attributen NOSUPERUSER och NOBYPASSRLS från ALTER ROLE -uttryck.

Skapa en dumpfil som innehåller de data som ska läsas in

Om du vill exportera din befintliga PostgreSQL-databas lokalt eller på en virtuell dator till en SQL-skriptfil kör du följande kommando i din befintliga miljö:

pg_dump <database name> -h <server name> -U <user name> > <database name>_dump.sql

Om du till exempel har en server med namnet mydemoserver, en användare med namnet myuser och en databas med namnet testdbkör du följande kommando:

pg_dump testdb -h mydemoserver.postgres.database.azure.com -U myuser > testdb_dump.sql

Om du använder en enskild server innehåller ditt användarnamn komponenten servernamn. Använd därför i stället för myusermyuser@mydemoserver.

Återställa data till måldatabasen

Återställa roller och användare

Innan du återställer databasobjekten kontrollerar du att du har dumpat och rensat rollerna korrekt. Om du migrerar i databaser på samma server är det inte nödvändigt att både dumpa rollerna och återställa dem. Men för migreringar över olika servrar eller miljöer är det här steget avgörande.

Om du vill återställa roller och användare till måldatabasen använder du följande kommando:

psql -f roles.sql -h <server_name> -U <user_name>

Ersätt <server_name> med namnet på målservern och <user_name> med ditt användarnamn. Det här kommandot använder psql verktyget för att köra SQL-kommandona i filen, vilket effektivt återställer rollerna och användarna till måldatabasen roles.sql .

Om du till exempel har en server med namnet mydemoserver, en användare med namnet myuser, kör du följande kommando:

psql -f roles.sql -h mydemoserver.postgres.database.azure.com -U myuser

Om du använder en enskild server innehåller ditt användarnamn komponenten servernamn. Använd därför i stället för myusermyuser@mydemoserver.

Kommentar

Om du redan har användare med samma namn på den enskild server eller lokala server som du migrerar från, och målservern, bör du vara medveten om att återställningsprocessen kan ändra lösenorden för dessa roller. Därför kan alla efterföljande kommandon som du behöver köra kräva de uppdaterade lösenorden. Detta gäller inte om källservern är en flexibel server, eftersom flexibel server inte tillåter dumpning av lösenord för användare på grund av förbättrade säkerhetsåtgärder.

Skapa en ny databas

Innan du återställer databasen kan du behöva skapa en ny, tom databas. För att göra detta måste användaren som du använder ha behörigheten CREATEDB . Här är två metoder som används ofta:

  1. Använda createdb verktyget Programmet createdb gör det möjligt att skapa databasen direkt från bash-kommandoraden, utan att behöva logga in på PostgreSQL eller lämna operativsystemets miljö. Till exempel:

    createdb <new database name> -h <server name> -U <user name>
    

    Om du till exempel har en server med namnet mydemoserver, en användare med namnet myuser och den nya databasen som du vill skapa är testdb_copykör du följande kommando:

    createdb testdb_copy -h mydemoserver.postgres.database.azure.com -U myuser
    

    Om du använder en enskild server innehåller ditt användarnamn komponenten servernamn. Använd därför i stället för myusermyuser@mydemoserver.

  2. Använd SQL-kommandot För att skapa en databas med ett SQL-kommando måste du ansluta till PostgreSQL-servern via ett kommandoradsgränssnitt eller ett databashanteringsverktyg. När du är ansluten kan du använda följande SQL-kommando för att skapa en ny databas:

CREATE DATABASE <new database name>;

Ersätt <new database name> med det namn som du vill ge den nya databasen. Om du till exempel vill skapa en databas med namnet testdb_copyär kommandot:

CREATE DATABASE testdb_copy;

Återställa dumpen

När du har skapat måldatabasen kan du återställa data till den här databasen från dumpfilen. Under återställningen loggar du eventuella fel till en errors.log fil och kontrollerar dess innehåll efter eventuella fel när återställningen är klar.

psql -f <database name>_dump.sql <new database name> -h <server name> -U <user name> 2> errors.log

Om du till exempel har en server med namnet mydemoserver, en användare med namnet myuser och en ny databas med namnet testdb_copykör du följande kommando:

psql -f testdb_dump.sql testdb_copy -h mydemoserver.postgres.database.azure.com -U myuser 2> errors.log

Kontroll efter återställning

När återställningsprocessen är klar är det viktigt att granska errors.log filen för eventuella fel som kan ha inträffat. Det här steget är avgörande för att säkerställa integriteten och fullständigheten hos återställda data. Åtgärda eventuella problem som finns i loggfilen för att upprätthålla databasens tillförlitlighet.

Optimera migreringsprocessen

När du arbetar med stora databaser kan dump- och återställningsprocessen vara lång och kan kräva optimering för att säkerställa effektivitet och tillförlitlighet. Det är viktigt att vara medveten om de olika faktorer som kan påverka prestandan för dessa åtgärder och vidta åtgärder för att optimera dem.

Detaljerad vägledning om hur du optimerar dump- och återställningsprocessen finns i artikeln Metodtips för pg_dump och pg_restore . Den här resursen innehåller omfattande information och strategier som kan vara till nytta för hantering av stora databaser.

Nästa steg