Migrace databáze PostgreSQL pomocí výpisu a obnovení
PLATÍ PRO: Flexibilní server Azure Database for PostgreSQL
Pomocí nástroje pg_dump můžete extrahovat databázi PostgreSQL do souboru výpisu. Metoda obnovení databáze závisí na formátu zvoleného výpisu. Pokud je výpis paměti pořízen ve formátu prostého formátu (což je výchozí -Fp
, takže není nutné zadat žádnou konkrétní možnost), jedinou možností, jak ji obnovit, je použít psql, protože vypíše soubor ve formátu prostého textu. Pro další tři metody výpisu paměti: vlastní, adresář a tar, pg_restore by se měly použít.
Důležité
Pokyny a příkazy uvedené v tomto článku jsou navrženy tak, aby se spouštěly v terminálech Bash. To zahrnuje prostředí, jako jsou Subsystém Windows pro Linux (WSL), Azure Cloud Shell a další rozhraní kompatibilní s Bash. Ujistěte se, že používáte terminál Bash, abyste mohli postupovat podle kroků a spouštět příkazy popsané v této příručce. Použití jiného typu prostředí terminálu nebo prostředí může vést k rozdílům v chování příkazů a nemusí vést k zamýšleným výsledkům.
V tomto článku se zaměříme na prostý (výchozí) a formáty adresářů. Formát adresáře je užitečný, protože umožňuje použít více jader ke zpracování, což může výrazně zvýšit efektivitu, zejména pro velké databáze.
Azure Portal zjednodušuje tento proces prostřednictvím okna Připojit tím, že nabízí předkonfigurované příkazy přizpůsobené vašemu serveru s hodnotami nahrazenými vašimi uživatelskými daty. Je důležité si uvědomit, že okno Připojit je dostupné jenom pro flexibilní server Azure Database for PostgreSQL, nikoli pro jeden server. Tuto funkci můžete použít takto:
Přístup k webu Azure Portal: Nejprve přejděte na Azure Portal a zvolte okno Připojit.
Vyberte databázi: V okně Připojit najdete rozevírací seznam vašich databází. Vyberte databázi, ze které chcete provést výpis paměti.
Zvolte příslušnou metodu: V závislosti na velikosti databáze si můžete vybrat mezi dvěma metodami:
pg_dump
&psql
- použití jednotného textového souboru: Ideální pro menší databáze, tato možnost využívá jeden textový soubor pro proces výpisu a obnovení.pg_dump
&pg_restore
- Použití více jader: U větších databází je tato metoda efektivnější, protože ke zpracování výpisu a obnovení používá více jader.
Příkazy pro kopírování a vkládání: Portál umožňuje použití
pg_dump
apsql
příkazypg_restore
. Tyto příkazy jsou již nahrazeny hodnotami podle serveru a databáze, které jste zvolili. Tyto příkazy zkopírujte a vložte.
Požadavky
Pokud používáte jeden server nebo nemáte přístup k portálu flexibilního serveru, přečtěte si tuto stránku dokumentace. Obsahuje informace podobné tomu, co se zobrazuje v okně Připojit pro flexibilní server na portálu.
Poznámka:
Protože pg_dump
všechny nástroje a pg_dumpall
psql
pg_restore
nástroje spoléhají na knihovnu libpq, můžete použít kteroukoli z podporovaných proměnných prostředí, které nabízí, nebo můžete použít soubor s heslem, abyste se vyhnuli výzvě k zadání hesla při každém spuštění některého z těchto příkazů.
K procházení tohoto návodu potřebujete:
- Server Azure Database for PostgreSQL, včetně pravidel brány firewall pro povolení přístupu.
- pg_dump, psql, pg_restore a pg_dumpall pro případ, že chcete migrovat s rolemi a oprávněními, nainstalovanými nástroji příkazového řádku.
- Rozhodněte se o umístění výpisu paměti: Zvolte místo, ze kterého chcete výpis paměti provést. Můžete ho provést z různých umístění, jako je samostatný virtuální počítač, Cloud Shell (kde už jsou nainstalované nástroje příkazového řádku, ale nemusí být v příslušné verzi, takže vždy zkontrolujte verzi pomocí,
psql --version
například ) nebo vlastního přenosného počítače. Vždy mějte na paměti vzdálenost a latenci mezi serverem PostgreSQL a umístěním, ze kterého spouštíte výpis nebo obnovení.
Důležité
Je nezbytné používat pg_dump
nástroje , psql
pg_restore
a pg_dumpall
nástroje, které jsou buď ze stejné hlavní verze, nebo vyšší hlavní verze než databázový server, ze kterého exportujete data z nebo importujete data do. Pokud to neuděláte, může to vést k neúspěšné migraci dat. Pokud má váš cílový server vyšší hlavní verzi než zdrojový server, použijte nástroje, které mají stejnou hlavní verzi nebo vyšší než cílový server.
Poznámka:
Je důležité si uvědomit, že pg_dump
je možné exportovat pouze jednu databázi najednou. Toto omezení platí bez ohledu na zvolenou metodu bez ohledu na to, jestli se používá jednotný soubor nebo více jader.
Dumping uživatelů a rolí pomocí pg_dumpall -r
pg_dump
slouží k extrahování databáze PostgreSQL do souboru s výpisem paměti. Je však důležité pochopit, že pg_dump
nevypisuje role ani definice uživatelů, protože se považují za globální objekty v rámci prostředí PostgreSQL. Pro komplexní migraci, včetně uživatelů a rolí, musíte použít pg_dumpall -r
.
Tento příkaz umožňuje zachytit všechny informace o rolích a uživatelech z prostředí PostgreSQL. Pokud migrujete v databázích na stejném serveru, můžete tento krok přeskočit a přejít do části Vytvořit novou databázi .
pg_dumpall -r -h <server name> -U <user name> > roles.sql
Pokud máte například server pojmenovaný mydemoserver
a uživatel s názvem myuser
spusťte následující příkaz:
pg_dumpall -r -h mydemoserver.postgres.database.azure.com -U myuser > roles.sql
Pokud používáte jeden server, vaše uživatelské jméno zahrnuje součást názvu serveru. Proto místo myuser
, použít myuser@mydemoserver
.
Výpis rolí z flexibilního serveru
V prostředí flexibilního serveru můžou rozšířená bezpečnostní opatření znamenat, že uživatelé nemají přístup k tabulce pg_authid, což je místo, kde se ukládají hesla rolí. Toto omezení má vliv na to, jak provádíte výpis stavu role, protože se standardní pg_dumpall -r
příkaz pokusí o přístup k této tabulce pro hesla a kvůli nedostatku oprávnění selžou.
Při dumpingu rolí z flexibilního serveru je důležité zahrnout do --no-role-passwords
příkazu pg_dumpall
možnost. Tato možnost brání pg_dumpall
v pokusu pg_authid
o přístup k tabulce, kterou nemůže číst kvůli omezením zabezpečení.
K úspěšnému výpisu rolí z flexibilního serveru použijte následující příkaz:
pg_dumpall -r --no-role-passwords -h <server name> -U <user name> > roles.sql
Pokud máte například server s názvem , uživatel s mydemoserver
názvem myuser
, spusťte následující příkaz:
pg_dumpall -r --no-role-passwords -h mydemoserver.postgres.database.azure.com -U myuser > roles.sql
Vyčištění výpisu stavu rolí
Při migraci výstupního souboru roles.sql
můžou být určité role a atributy, které nejsou v novém prostředí použitelné nebo přípustné. Tady je postup, který je potřeba vzít v úvahu:
Odebrání atributů, které můžou nastavit jenom superuživatelé: Pokud migrujete do prostředí, kde nemáte oprávnění superuživatele, odeberte atributy jako
NOSUPERUSER
aNOBYPASSRLS
z výpisu stavu rolí.Vyloučení uživatelů specifických pro službu: Vyloučit uživatele služby s jedním serverem, například
azure_superuser
neboazure_pg_admin
. Ty jsou specifické pro službu a automaticky se vytvoří v novém prostředí.
K vyčištění výpisu stavu rolí použijte následující sed
příkaz:
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
Tento příkaz odstraní řádky obsahující azure_superuser
, , azure_pg_admin
, azuresu
řádky začínající CREATE ROLE replication
a ALTER ROLE replication
a odebere NOSUPERUSER
a NOBYPASSRLS
atributy z ALTER ROLE
příkazů.
Vytvoření souboru s výpisem paměti, který obsahuje data, která se mají načíst
Pokud chcete exportovat existující místní databázi PostgreSQL nebo do souboru skriptu SQL, spusťte ve stávajícím prostředí následující příkaz:
- pg_dump & psql – použití textového souboru s jednotným číslem
- pg_dump a pg_restore – použití více jader
pg_dump <database name> -h <server name> -U <user name> > <database name>_dump.sql
Pokud máte například server s názvem mydemoserver
, uživatel s názvem myuser
a databázi s názvem testdb
, spusťte následující příkaz:
pg_dump testdb -h mydemoserver.postgres.database.azure.com -U myuser > testdb_dump.sql
Pokud používáte jeden server, vaše uživatelské jméno zahrnuje součást názvu serveru. Proto místo myuser
, použít myuser@mydemoserver
.
Obnovení dat do cílové databáze
Obnovení rolí a uživatelů
Před obnovením databázových objektů se ujistěte, že jste správně vypsali a vyčistili role. Pokud migrujete v databázích na stejném serveru, nemusí být potřeba obě role zahazovat a obnovovat. Pro migrace mezi různými servery nebo prostředími je ale tento krok zásadní.
Pokud chcete obnovit role a uživatele do cílové databáze, použijte následující příkaz:
psql -f roles.sql -h <server_name> -U <user_name>
Nahraďte <server_name>
názvem cílového serveru a <user_name>
uživatelským jménem. Tento příkaz pomocí psql
nástroje spustí příkazy SQL obsažené v roles.sql
souboru a efektivně obnoví role a uživatele do cílové databáze.
Pokud máte například server s názvem , uživatel s mydemoserver
názvem myuser
, spusťte následující příkaz:
psql -f roles.sql -h mydemoserver.postgres.database.azure.com -U myuser
Pokud používáte jeden server, vaše uživatelské jméno zahrnuje součást názvu serveru. Proto místo myuser
, použít myuser@mydemoserver
.
Poznámka:
Pokud už máte uživatele se stejnými názvy na jednoúčelovém serveru nebo na místním serveru, ze kterého migrujete, a cílový server, mějte na paměti, že tento proces obnovení může změnit hesla pro tyto role. V důsledku toho můžou všechny následné příkazy, které je potřeba provést, vyžadovat aktualizovaná hesla. To neplatí, pokud je váš zdrojový server flexibilním serverem, protože flexibilní server neumožňuje uživatelům vypisovat hesla z důvodu vylepšených bezpečnostních opatření.
Vytvoření nové databáze
Před obnovením databáze možná budete muset vytvořit novou prázdnou databázi. K tomu musí mít CREATEDB
uživatel, který používáte, oprávnění. Tady jsou dvě běžně používané metody:
Použití
createdb
nástrojecreatedb
Program umožňuje vytvoření databáze přímo z příkazového řádku Bash, aniž by bylo nutné se přihlásit k PostgreSQL nebo opustit prostředí operačního systému. Například:createdb <new database name> -h <server name> -U <user name>
Pokud máte například server s názvem
mydemoserver
, uživatel s názvemmyuser
a novou databázi, kterou chcete vytvořit, jetestdb_copy
, spusťte následující příkaz:createdb testdb_copy -h mydemoserver.postgres.database.azure.com -U myuser
Pokud používáte jeden server, vaše uživatelské jméno zahrnuje součást názvu serveru. Proto místo
myuser
, použítmyuser@mydemoserver
.Pomocí příkazu SQL vytvoříte databázi pomocí příkazu SQL, budete se muset připojit k serveru PostgreSQL pomocí rozhraní příkazového řádku nebo nástroje pro správu databáze. Po připojení můžete k vytvoření nové databáze použít následující příkaz SQL:
CREATE DATABASE <new database name>;
Nahraďte <new database name>
názvem, který chcete dát nové databázi. Pokud například chcete vytvořit databázi s názvem testdb_copy
, příkaz by byl:
CREATE DATABASE testdb_copy;
Obnovení výpisu paměti
Po vytvoření cílové databáze můžete obnovit data do této databáze ze souboru s výpisem paměti. Během obnovení zapíšete do souboru všechny chyby errors.log
a po dokončení obnovení zkontrolujte jeho obsah.
- pg_dump & psql – použití textového souboru s jednotným číslem
- pg_dump a pg_restore – použití více jader
psql -f <database name>_dump.sql <new database name> -h <server name> -U <user name> 2> errors.log
Pokud máte například server s názvem , uživatel s mydemoserver
názvem myuser
a novou databázi s názvem testdb_copy
, spusťte následující příkaz:
psql -f testdb_dump.sql testdb_copy -h mydemoserver.postgres.database.azure.com -U myuser 2> errors.log
Kontrola po obnovení
Po dokončení procesu obnovení je důležité zkontrolovat errors.log
v souboru všechny chyby, ke kterým mohlo dojít. Tento krok je zásadní pro zajištění integrity a úplnosti obnovených dat. Vyřešte všechny problémy zjištěné v souboru protokolu, abyste zachovali spolehlivost databáze.
Optimalizace procesu migrace
Při práci s velkými databázemi může být proces výpisu a obnovení zdlouhavý a může vyžadovat optimalizaci, aby se zajistila efektivita a spolehlivost. Je důležité vědět o různých faktorech, které můžou ovlivnit výkon těchto operací, a provést kroky k jejich optimalizaci.
Podrobné pokyny k optimalizaci procesu výpisu a obnovení najdete v článku o osvědčených postupech pro pg_dump a pg_restore . Tento prostředek poskytuje komplexní informace a strategie, které mohou být užitečné pro zpracování velkých databází.
Další kroky
- Osvědčené postupy pro pg_dump a pg_restore
- Další informace o migraci databází do Služby Azure Database for PostgreSQL najdete v průvodci migrací databází.