Transportar um banco de dados PostgreSQL para o destino a partir da origem
Depois de concluir o processo descrito em Configurar o transporte de um banco de dados PostgreSQL, você pode iniciar o transporte. Para fazer isso, execute a função transport.import_from_server
na instância de banco de dados de destino. Na sintaxe a seguir, você pode encontrar os parâmetros da função.
SELECT transport.import_from_server( '
source-db-instance-endpoint
',source-db-instance-port
, 'source-db-instance-user
', 'source-user-password
', 'source-database-name
', 'destination-user-password
', false);
O valor false
mostrado no exemplo diz à função que esta não é uma simulação. Para testar sua configuração de transporte, você pode especificar true
para dry_run
quando você chama a função, conforme mostrado a seguir:
postgres=>
SELECT transport.import_from_server( 'docs-lab-source-db.666666666666
aws-region
.rds.amazonaws.com', 5432, 'postgres', '********', 'labdb', '******', true);INFO: Starting dry-run of import of database "labdb". INFO: Created connections to remote database (took 0.03 seconds). INFO: Checked remote cluster compatibility (took 0.05 seconds). INFO: Dry-run complete (took 0.08 seconds total). import_from_server -------------------- (1 row)
As linhas INFO são emitidas porque o parâmetro pg_transport.timing
está definido como seu valor padrão, true
. Defina dry_run
para false
quando você executa o comando e o banco de dados de origem é importado para o destino, conforme mostrado a seguir:
INFO: Starting import of database "labdb".
INFO: Created connections to remote database (took 0.02 seconds).
INFO: Marked remote database as read only (took 0.13 seconds).
INFO: Checked remote cluster compatibility (took 0.03 seconds).
INFO: Signaled creation of PITR blackout window (took 2.01 seconds).
INFO: Applied remote database schema pre-data (took 0.50 seconds).
INFO: Created connections to local cluster (took 0.01 seconds).
INFO: Locked down destination database (took 0.00 seconds).
INFO: Completed transfer of database files (took 0.24 seconds).
INFO: Completed clean up (took 1.02 seconds).
INFO: Physical transport complete (took 3.97 seconds total).
import_from_server
--------------------
(1 row)
Esta função requer que você forneça senhas de usuário do banco de dados. Portanto, recomendamos que você altere as senhas das funções de usuário usadas após a conclusão do transporte. Ou você pode usar variáveis de ligação do SQL para criar funções de usuário temporárias. Use essas funções temporárias para o transporte e descarte as funções posteriormente.
Quando o transporte não for bem-sucedido, talvez você veja uma mensagem de erro semelhante à seguinte:
pg_transport.num_workers=8 25% of files transported failed to download file data
A mensagem de erro “falha ao baixar dados do arquivo” indica que o número de processos de trabalho não está definido corretamente para o tamanho do banco de dados. Talvez seja necessário aumentar ou diminuir o valor definido para pg_transport.num_workers
. Cada falha informa a porcentagem de conclusão, para que você possa ver o impacto de suas alterações. Por exemplo, alterar a configuração de 8 para 4 em um caso resultou no seguinte:
pg_transport.num_workers=4 75% of files transported failed to download file data
Lembre-se de que o parâmetro max_worker_processes
também é levado em consideração durante o processo de transporte. Em outras palavras, talvez seja necessário modificar pg_transport.num_workers
e max_worker_processes
para transportar o banco de dados com êxito. O exemplo mostrado finalmente funcionou quando pg_transport.num_workers
foi definido como 2:
pg_transport.num_workers=2 100% of files transported
Para obter mais informações sobre a função transport.import_from_server
seus respectivos parâmetros de configuração, consulte Referência de funções de bancos de dados transportáveis.