Eseguire la migrazione del database PostgreSQL usando dump e ripristinoMigrate your PostgreSQL database using dump and restore

È possibile usare pg_dump per estrarre un database PostgreSQL in un file di dump e pg_restore per ripristinare il database PostgreSQL da un file di archivio creato da pg_dump.You can use pg_dump to extract a PostgreSQL database into a dump file and pg_restore to restore the PostgreSQL database from an archive file created by pg_dump.

PrerequisitiPrerequisites

Per proseguire con questa guida è necessario:To step through this how-to guide, you need:

Seguire questi passaggi per eseguire il dump e il ripristino del database PostgreSQL:Follow these steps to dump and restore your PostgreSQL database:

Creare un file di dump usando pg_dump che contiene i dati da caricareCreate a dump file using pg_dump that contains the data to be loaded

Per eseguire il backup di un database PostgreSQL in locale o in una macchina virtuale, eseguire questo comando:To back up an existing PostgreSQL database on-premises or in a VM, run the following command:

pg_dump -Fc -v --host=<host> --username=<name> --dbname=<database name> -f <database>.dump

Se ad esempio è presente un server locale che contiene un database denominato testdb, eseguire:For example, if you have a local server and a database called testdb in it

pg_dump -Fc -v --host=localhost --username=masterlogin --dbname=testdb -f testdb.dump

Ripristinare i dati nel database di Azure di destinazione per PostgreSQL usando pg_restoreRestore the data into the target Azure Database for PostgreSQL using pg_restore

Dopo avere creato il database di destinazione, è possibile usare il comando pg_restore e il parametro -d, --dbname per ripristinare i dati nel database di destinazione dal file di dump.After you've created the target database, you can use the pg_restore command and the -d, --dbname parameter to restore the data into the target database from the dump file.

pg_restore -v --no-owner --host=<server name> --port=<port> --username=<user@servername> --dbname=<target database name> <database>.dump

Se si include il parametro --no-owner, tutti gli oggetti creati durante il ripristino saranno di proprietà dell'utente specificato con --username.Including the --no-owner parameter causes all objects created during the restore to be owned by the user specified with --username. Per altre informazioni, vedere la documentazione ufficiale di PostgreSQL per pg_restore.For more information, see the official PostgreSQL documentation on pg_restore.

Nota

Se il server PostgreSQL richiede connessioni SSL (attive per impostazione predefinita nel Database di Azure per i server PostgreSQL), impostare una variabile di ambiente PGSSLMODE=require in modo che lo strumento pg_restore si connetta a SSL.If your PostgreSQL server requires SSL connections (on by default in Azure Database for PostgreSQL servers), set an environment variable PGSSLMODE=require so that the pg_restore tool connects with SSL. Senza SSL, l'errore può riportare FATAL: SSL connection is required. Please specify SSL options and retry.Without SSL, the error may read FATAL: SSL connection is required. Please specify SSL options and retry.

Nella riga di comando di Windows, eseguire il comando SET PGSSLMODE=require prima di eseguire il comando pg_restore.In the Windows command line, run the command SET PGSSLMODE=require before running the pg_restore command. Nella riga di comando di Linux o Bash, eseguire il comando export PGSSLMODE=require prima di eseguire il comando pg_restore.In Linux or Bash run the command export PGSSLMODE=require before running the pg_restore command.

In questo esempio i dati vengono ripristinati dal file di dump testdb.dump nel database mypgsqldb disponibile sul server di destinazione mydemoserver.postgres.database.azure.com.In this example, restore the data from the dump file testdb.dump into the database mypgsqldb on target server mydemoserver.postgres.database.azure.com.

pg_restore -v --no-owner --host=mydemoserver.postgres.database.azure.com --port=5432 --username=mylogin@mydemoserver --dbname=mypgsqldb testdb.dump

Ottimizzazione del processo di migrazioneOptimizing the migration process

Un modo per eseguire la migrazione di un database PostgreSQL esistente al servizio Database di Azure per PostgreSQL è effettuare il backup del database nell'origine e ripristinarlo in Azure.One way to migrate your existing PostgreSQL database to Azure Database for PostgreSQL service is to back up the database on the source and restore it in Azure. Per ridurre al minimo il tempo necessario per completare la migrazione, è consigliabile usare i parametri seguenti con i comandi di backup e ripristino.To minimize the time required to complete the migration, consider using the following parameters with the backup and restore commands.

Nota

Per informazioni dettagliate sulla sintassi, vedere gli articoli pg_dump e pg_restore.For detailed syntax information, see the articles pg_dump and pg_restore.

Per il backupFor the backup

  • Eseguire il backup con lo switch -Fc in modo che sia possibile eseguire il ripristino in parallelo per renderlo più rapido.Take the backup with the -Fc switch so that you can perform the restore in parallel to speed it up. ad esempio:For example:

    pg_dump -h MySourceServerName -U MySourceUserName -Fc -d MySourceDatabaseName -f Z:\Data\Backups\MyDatabaseBackup.dump
    

Per il ripristinoFor the restore

  • Si consiglia di spostare il file di backup in una macchina virtuale di Azure nella stessa area del server del Database di Azure per PostgreSQL in cui si sta eseguendo la migrazione e di eseguire il pg_restore da tale VM per ridurre la latenza di rete.We suggest that you move the backup file to an Azure VM in the same region as the Azure Database for PostgreSQL server you are migrating to, and do the pg_restore from that VM to reduce network latency. Si consiglia inoltre di creare la macchina virtuale con la funzionalità rete accelerata abilitata.We also recommend that the VM is created with accelerated networking enabled.

  • Deve essere già eseguito per impostazione predefinita, ma aprire il file di dump per verificare che le istruzioni CREATE INDEX siano effettuate dopo l'inserimento dei dati.It should be already done by default, but open the dump file to verify that the create index statements are after the insert of the data. In caso contrario, spostare le istruzioni CREATE INDEX dopo aver inserito i dati.If it isn't the case, move the create index statements after the data is inserted.

  • Ripristinare con gli switch -Fc e -j # per parallelizzare il ripristino.Restore with the switches -Fc and -j # to parallelize the restore. # è il numero di core nel server di destinazione.# is the number of cores on the target server. È anche possibile provare con # impostato su due volte il numero di core del server di destinazione per verificare l'impatto.You can also try with # set to twice the number of cores of the target server to see the impact. ad esempio:For example:

    pg_restore -h MyTargetServer.postgres.database.azure.com -U MyAzurePostgreSQLUserName -Fc -j 4 -d MyTargetDatabase Z:\Data\Backups\MyDatabaseBackup.dump
    
  • È anche possibile modificare il file di dump aggiungendo il comando set synchronous_commit = off; all'inizio e il comando set synchronous_commit = on; alla fine.You can also edit the dump file by adding the command set synchronous_commit = off; at the beginning and the command set synchronous_commit = on; at the end. Non accenderlo alla fine, prima che le applicazioni cambino i dati è possibile che si verifichi una successiva perdita di dati.Not turning it on at the end, before the apps change the data, may result in subsequent loss of data.

  • Nel server di Database di Azure per PostgreSQL di destinazione è consigliabile eseguire le seguenti operazioni prima del ripristino:On the target Azure Database for PostgreSQL server, consider doing the following before the restore:

    • Disattivare il rilevamento delle prestazioni delle query, poiché queste statistiche non sono necessarie durante la migrazione.Turn off query performance tracking, since these statistics are not needed during the migration. È possibile eseguire questa operazione impostando pg_stat_statements.track, pg_qs.query_capture_mode e pgms_wait_sampling.query_capture_mode su NONE.You can do this by setting pg_stat_statements.track, pg_qs.query_capture_mode, and pgms_wait_sampling.query_capture_mode to NONE.

    • Usare uno SKU con prestazioni di calcolo e memoria elevate, ad esempio 32 vCore ottimizzati per la memoria, per completare la migrazione più velocemente.Use a high compute and high memory sku, like 32 vCore Memory Optimized, to speed up the migration. Sarà poi possibile tornare allo SKU preferito al termine della migrazione.You can easily scale back down to your preferred sku after the restore is complete. Con uno SKU più potente, si può ottenere maggior parallelismo aumentando il parametro -j corrispondente nel comando pg_restore.The higher the sku, the more parallelism you can achieve by increasing the corresponding -j parameter in the pg_restore command.

    • Un numero maggiore di operazioni di I/O al secondo nel server di destinazione può migliorare le prestazioni di ripristino.More IOPS on the target server could improve the restore performance. È possibile effettuare il provisioning di più operazioni di I/O al secondo aumentando le dimensioni delle risorse di archiviazione del server.You can provision more IOPS by increasing the server's storage size. Questa impostazione non è reversibile, ma è opportuno valutare se un aumento delle operazioni di I/O al secondo può contribuire a migliorare il carico di lavoro effettivo.This setting is not reversible, but consider whether a higher IOPS would benefit your actual workload in the future.

Ricordarsi di testare e validare questi comandi in un ambiente di test prima di usarli in produzione.Remember to test and validate these commands in a test environment before you use them in production.

Passaggi successiviNext steps