Transportar bancos de dados PostgreSQL entre instâncias de banco de dados
Usando os bancos de dados PostgreSQL transportáveis para Amazon RDS, você pode mover um banco de dados PostgreSQL entre duas instâncias de banco de dados. Essa é uma maneira muito rápida de migrar bancos de dados grandes entre diferentes instâncias de banco de dados. Para usar essa abordagem, suas instâncias de banco de dados devem executar a mesma versão principal do PostgreSQL.
Esse recurso requer que você instale a extensão pg_transport
nas instâncias de banco de dados de origem e de destino. A extensão pg_transport
fornece um mecanismo de transporte físico que move os arquivos de banco de dados com o mínimo de processamento. Esse mecanismo move os dados muito mais rapidamente que os processos tradicionais de despejo e carregamento, com menos tempo de inatividade.
nota
Os bancos de dados PostgreSQL transportáveis estão disponíveis no RDS para PostgreSQL versões 11.5 e posteriores e 10.10 e posteriores.
Para transportar uma instância de banco de dados PostgreSQL de uma instância de banco de dados do RDS for PostgreSQL para outra, você primeiro configura as instâncias de origem e de destino, conforme detalhado em Configurar uma instância de banco de dados para transporte. Em seguida, você pode transportar o banco de dados usando a função descrita em Como transportar um banco de dados PostgreSQL.
Tópicos
- O que acontece durante o transporte do banco de dados
- Limitações para o uso de bancos de dados PostgreSQL transportáveis
- Configurar o transporte de um banco de dados PostgreSQL
- Transportar um banco de dados PostgreSQL para o destino a partir da origem
- Referência de funções de bancos de dados transportáveis
- Referência de parâmetros de bancos de dados transportáveis
O que acontece durante o transporte do banco de dados
O recurso de bancos de dados PostgreSQL transportáveis usa um modelo pull para importar o banco de dados da instância de banco de dados de origem para a de destino. A função transport.import_from_server
cria o banco de dados em trânsito na instância de banco de dados de destino. O banco de dados em trânsito está inacessível na instância de banco de dados de destino durante o transporte.
Quando o transporte começa, todas as sessões atuais no banco de dados de origem são encerradas. Quaisquer bancos de dados que não sejam o banco de dados de origem na instância de banco de dados de origem não são afetados pelo transporte.
O banco de dados de origem é colocado em um modo somente leitura especial. Enquanto estiver nesse modo, você pode se conectar ao banco de dados de origem e executar consultas somente leitura. No entanto, as consultas habilitadas para gravação e alguns outros tipos de comandos estão bloqueados. Somente o banco de dados de origem específico que está sendo transportado é afetado por essas restrições.
Durante o transporte, você não pode restaurar a instância do banco de dados de destino em um determinado momento. Isso ocorre porque o transporte não é transacional e não usa o log de gravação antecipada do PostgreSQL para registrar as alterações. Se a instância de banco de dados de destino tiver backups automáticos ativados, um backup será feito automaticamente após a conclusão do transporte. As restaurações em um ponto anterior no tempo ficam disponíveis por algumas horas após a conclusão do backup.
Se o transporte falhar, a extensão pg_transport
tenta desfazer todas as alterações nas instâncias de banco de dados de origem e destino. Isso inclui a remoção do banco de dados parcialmente transportado do destino. Dependendo do tipo de falha, o banco de dados de origem pode continuar a rejeitar consultas habilitadas para gravação. Se isso acontecer, use o comando a seguir para permitir consultas habilitadas para gravação.
ALTER DATABASE
db-name
SET default_transaction_read_only = false;
Limitações para o uso de bancos de dados PostgreSQL transportáveis
Os bancos de dados transportáveis têm as seguintes limitações:
Réplicas de leitura – não é possível usar bancos de dados transportáveis em réplicas de leitura nem em instâncias pai de réplicas de leitura.
-
Tipos de coluna não compatíveis – não é possível usar os tipos de dados
reg
em nenhuma tabela de banco de dados que você planeja transportar com esse método. Esses tipos dependem dos IDs de objeto (OIDs) do catálogo do sistema, que geralmente são alterados durante o transporte. -
Espaços de tabela – todos os objetos do banco de dados de origem devem estar no espaço de tabela
pg_default
padrão. -
Compatibilidade – as instâncias de banco de dados de origem e destino devem executar a mesma versão principal do PostgreSQL.
-
Extensões: a instância de banco de dados de origem pode ter apenas a extensão
pg_transport
instalada. -
Funções e ACLs – os privilégios de acesso e as informações de propriedade do banco de dados de origem não são transferidos para o banco de dados de destino. Todos os objetos de banco de dados são criados e pertencentes ao usuário de destino local do transporte.
Transportes simultâneos: uma única instância de banco de dados pode aceitar até 32 transportes simultâneos, incluindo importações e exportações, se os processos do operador tiverem sido configurados corretamente.
-
Somente para instâncias de banco de dados do RDS for PostgreSQL: os bancos de dados transportáveis do PostgreSQL são compatíveis apenas com instâncias de banco de dados do RDS for PostgreSQL. Não é possível utilizá-los com bancos de dados locais ou bancos de dados em execução no Amazon EC2.