Migrera postgreSQL-databasen med hjälp av dump och återställning
GÄLLER FÖR: Azure Database for PostgreSQL – 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 Portal 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:
Åtkomst Azure Portal: Gå först till Azure Portal och välj bladet Anslut.
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.
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.
Kopiera och klistra in kommandon: Portalen ger dig redo att använda
pg_dump
ochpsql
ellerpg_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 den som visas på bladet Anslut för flexibel server på portalen.
Kommentar
Eftersom pg_dump
, psql
pg_restore
och pg_dumpall
alla verktyg förlitar sig på libpq kan du använda någon av de miljövariabler som stöds, eller så kan du använda lösenordsfilen för att undvika att bli tillfrågad om lösenordet varje gång du kör något av dessa kommandon.
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_restore
psql
och 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 myuser
myuser@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
ochNOBYPASSRLS
från rolldumpningen.Exkludera tjänstspecifika användare: Exkludera användare av en enskild servertjänst, till exempel
azure_superuser
ellerazure_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 replication
och 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 testdb
kö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 myuser
myuser@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 myuser
myuser@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:
Använda
createdb
verktyget Programmetcreatedb
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 namnetmyuser
och den nya databasen som du vill skapa ärtestdb_copy
kö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
myuser
myuser@mydemoserver
.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_copy
kö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
- Metodtips för pg_dump och pg_restore.
- Mer information om hur du migrerar databaser till Azure Database for PostgreSQL finns i Guiden för databasmigrering.