Migrar seu banco de dados PostgreSQL usando despejo e restauraçãoMigrate your PostgreSQL database using dump and restore

Você pode usar pg_dump para extrair um banco de dados PostgreSQL em um arquivo de despejo e pg_restore restaurar o banco de dados PostgreSQL de um arquivo morto criado pelo 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.

Pré-requisitosPrerequisites

Para percorrer este guia de instruções, você precisa de:To step through this how-to guide, you need:

Siga estas etapas para despejar e restaurar o banco de dados PostgreSQL:Follow these steps to dump and restore your PostgreSQL database:

Criar um arquivo de despejo usando pg_dump que contém os dados a serem carregadosCreate a dump file using pg_dump that contains the data to be loaded

Para fazer backup de um banco de dados PostgreSQL existente localmente ou em uma VM, execute o seguinte 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

Por exemplo, se você tiver um servidor local e um banco de dados chamado TestDB neleFor 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

Restaurar os dados para o banco de dado de destino do Azure para PostgreSQL usando pg_restoreRestore the data into the target Azure Database for PostgreSQL using pg_restore

Depois de criar o banco de dados de destino, você pode usar o comando pg_restore e o parâmetro-d,--dbname para restaurar os dados no banco de dado de destino do arquivo de despejo.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

A inclusão do parâmetro--no-Owner faz com que todos os objetos criados durante a restauração sejam de Propriedade do usuário especificado com--username.Including the --no-owner parameter causes all objects created during the restore to be owned by the user specified with --username. Para obter mais informações, consulte a documentação oficial do PostgreSQL em pg_restore.For more information, see the official PostgreSQL documentation on pg_restore.

Nota

Se o seu servidor PostgreSQL exigir conexões SSL (ativadas por padrão no banco de dados do Azure para servidores PostgreSQL), defina uma variável de ambiente PGSSLMODE=require para que a ferramenta pg_restore se conecte ao 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. Sem o SSL, o erro pode ser lido 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.

Na linha de comando do Windows, execute o comando SET PGSSLMODE=require antes de executar o comando pg_restore.In the Windows command line, run the command SET PGSSLMODE=require before running the pg_restore command. No Linux ou bash, execute o comando export PGSSLMODE=require antes de executar o comando pg_restore.In Linux or Bash run the command export PGSSLMODE=require before running the pg_restore command.

Neste exemplo, restaure os dados do arquivo de despejo TestDB. dump no banco de dados mypgsqldb no servidor de destino 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

Otimizando o processo de migraçãoOptimizing the migration process

Uma maneira de migrar seu banco de dados PostgreSQL existente para o serviço banco de dados do Azure para PostgreSQL é fazer backup do banco de dados na origem e restaurá-lo no 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. Para minimizar o tempo necessário para concluir a migração, considere usar os parâmetros a seguir com os comandos backup e Restore.To minimize the time required to complete the migration, consider using the following parameters with the backup and restore commands.

Nota

Para obter informações detalhadas de sintaxe, consulte os artigos pg_dump e pg_restore.For detailed syntax information, see the articles pg_dump and pg_restore.

Para o backupFor the backup

  • Faça o backup com a opção-FC para que você possa executar a restauração em paralelo para acelerar a ti.Take the backup with the -Fc switch so that you can perform the restore in parallel to speed it up. Por exemplo:For example:

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

Para a restauraçãoFor the restore

  • Sugerimos que você mova o arquivo de backup para uma VM do Azure na mesma região que o banco de dados do Azure para o servidor PostgreSQL para o qual você está migrando e faça o pg_restore dessa VM para reduzir a latência de rede.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. Também recomendamos que a VM seja criada com a rede acelerada habilitada.We also recommend that the VM is created with accelerated networking enabled.

  • Ele já deve ser feito por padrão, mas abra o arquivo de despejo para verificar se as instruções CREATE INDEX são posteriores à inserção dos dados.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. Se não for o caso, mova as instruções CREATE INDEX depois que os dados forem inseridos.If it isn't the case, move the create index statements after the data is inserted.

  • Restaure com os # switches-FC e-j para paralelizar a restauração.Restore with the switches -Fc and -j # to parallelize the restore. # é o número de núcleos no servidor de destino.# is the number of cores on the target server. Você também pode tentar com # definido como duas vezes o número de núcleos do servidor de destino para ver o impacto.You can also try with # set to twice the number of cores of the target server to see the impact. Por exemplo:For example:

    pg_restore -h MyTargetServer.postgres.database.azure.com -U MyAzurePostgreSQLUserName -Fc -j 4 -d MyTargetDatabase Z:\Data\Backups\MyDatabaseBackup.dump
    
  • Você também pode editar o arquivo de despejo adicionando o comando set synchronous_commit = off; no início e no conjunto de comandos synchronous_commit = on; no final.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. Não ligá-lo no final, antes que os aplicativos alterem os dados, pode resultar em perda subsequente de dados.Not turning it on at the end, before the apps change the data, may result in subsequent loss of data.

  • No banco de dados do Azure de destino para o servidor PostgreSQL, considere fazer o seguinte antes da restauração:On the target Azure Database for PostgreSQL server, consider doing the following before the restore:

    • Desative o rastreamento de desempenho de consultas, já que essas estatísticas não são necessárias durante a migração.Turn off query performance tracking, since these statistics are not needed during the migration. Você pode fazer isso definindo pg_stat_statements. Track, pg_qs. query_capture_mode e pgms_wait_sampling. query_capture_mode como 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.

    • Use uma alta computação e um SKU de memória alta, como a memória vCore de 32, para acelerar a migração.Use a high compute and high memory sku, like 32 vCore Memory Optimized, to speed up the migration. Você pode dimensionar facilmente de volta para o SKU preferencial depois que a restauração for concluída.You can easily scale back down to your preferred sku after the restore is complete. Quanto maior a SKU, mais paralelismo você pode obter aumentando o parâmetro -j correspondente no comando pg_restore.The higher the sku, the more parallelism you can achieve by increasing the corresponding -j parameter in the pg_restore command.

    • Mais IOPS no servidor de destino pode melhorar o desempenho de restauração.More IOPS on the target server could improve the restore performance. Você pode provisionar mais IOPS aumentando o tamanho de armazenamento do servidor.You can provision more IOPS by increasing the server's storage size. Essa configuração não é reversível, mas considere se um IOPS maior beneficiaria sua carga de trabalho real no futuro.This setting is not reversible, but consider whether a higher IOPS would benefit your actual workload in the future.

Lembre-se de testar e validar esses comandos em um ambiente de teste antes de usá-los na produção.Remember to test and validate these commands in a test environment before you use them in production.

Passos seguintesNext steps