

# Como transportar bancos de dados PostgreSQL entre instâncias de banco de dados
<a name="PostgreSQL.TransportableDB"></a>

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](PostgreSQL.TransportableDB.Setup.md). Em seguida, você pode transportar o banco de dados usando a função descrita em [ Como transportar um banco de dados PostgreSQL](PostgreSQL.TransportableDB.Transporting.md). 

**Topics**
+ [O que acontece durante o transporte do banco de dados](#PostgreSQL.TransportableDB.DuringTransport)
+ [Limitações para o uso de bancos de dados PostgreSQL transportáveis](#PostgreSQL.TransportableDB.Limits)
+ [Configurar o transporte de um banco de dados PostgreSQL](PostgreSQL.TransportableDB.Setup.md)
+ [Transportar um banco de dados PostgreSQL para o destino a partir da origem](PostgreSQL.TransportableDB.Transporting.md)
+ [Referência de funções de bancos de dados transportáveis](PostgreSQL.TransportableDB.transport.import_from_server.md)
+ [Referência de parâmetros de bancos de dados transportáveis](PostgreSQL.TransportableDB.Parameters.md)

## O que acontece durante o transporte do banco de dados
<a name="PostgreSQL.TransportableDB.DuringTransport"></a>

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
<a name="PostgreSQL.TransportableDB.Limits"></a>

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.