

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Usando um banco de dados PostgreSQL como fonte AWS DMS
<a name="CHAP_Source.PostgreSQL"></a>

Você pode migrar dados de um ou vários bancos de dados PostgreSQL usando o. AWS DMS Com um banco de dados PostgreSQL como origem, é possível migrar dados para outro banco de dados PostgreSQL ou para um dos outros bancos de dados compatíveis. 

Para obter informações sobre as versões do PostgreSQL AWS DMS que oferecem suporte como fonte, consulte. [Fontes para AWS DMS](CHAP_Introduction.Sources.md) 

AWS DMS oferece suporte ao PostgreSQL para esses tipos de bancos de dados: 
+ Bancos de dados on-premises
+ Bancos de dados em uma instância do Amazon EC2
+ Bancos de dados em uma instância de banco de dados Amazon RDS
+ Bancos de dados em uma instância de banco de dados com base na edição do Amazon Aurora compatível com PostgreSQL
+ Bancos de dados em uma instância de banco de dados com base na edição Tecnologia Sem Servidor do Amazon Aurora compatível com o PostgreSQL

**nota**  
O DMS é compatível com o Amazon Aurora PostgreSQL—com Tecnologia Sem Servidor V1 como origem somente para carga máxima. Mas é possível utilizar o Amazon Aurora PostgreSQL—com Tecnologia Sem Servidor V2 como origem para tarefas de carga máxima, carga máxima \$1 CDC e CDC somente.

É possível utilizar o Secure Socket Layers (SSL) para criptografar conexões entre o endpoint do PostgreSQL e a instância de replicação. Para obter mais informações sobre como utilizar o SSL com um endpoint do PostgreSQL, consulte [Usando SSL com AWS Database Migration Service](CHAP_Security.SSL.md).

O único requisito de segurança ao utilizar o PostgreSQL como origem é que a conta de usuário especificada deve ser de um usuário registrado no banco de dados PostgreSQL.

Para configurar um banco de dados PostgreSQL como AWS DMS um endpoint de origem, faça o seguinte:
+ Crie um usuário do PostgreSQL com as permissões apropriadas para AWS DMS fornecer acesso ao seu banco de dados de origem do PostgreSQL.
**nota**  
Se o banco de dados de origem PostgreSQL for autogerenciado, consulte [Trabalhando com bancos de dados PostgreSQL autogerenciados como fonte em AWS DMS](#CHAP_Source.PostgreSQL.Prerequisites) para obter mais informações.
Se o banco de dados de origem PostgreSQL for gerenciado pelo Amazon RDS, consulte [Trabalhando com bancos AWS de dados PostgreSQL gerenciados como fonte de DMS](#CHAP_Source.PostgreSQL.RDSPostgreSQL) para obter mais informações.
+ Crie um endpoint de origem do PostgreSQL que esteja em conformidade com a configuração do banco do dados PostgreSQL escolhida.
+ Crie uma tarefa ou um conjunto de tarefas para migrar as tabelas.

  Para criar uma full-load-only tarefa, nenhuma configuração adicional de endpoint é necessária.

  Antes de criar uma tarefa de captura de dados de alteração (uma tarefa de CDC somente ou de carga máxima e CDC), consulte [Habilitando o CDC usando um banco de dados PostgreSQL autogerenciado como fonte AWS DMS](#CHAP_Source.PostgreSQL.Prerequisites.CDC) ou [Habilitando o CDC com uma instância de banco AWS de dados PostgreSQL gerenciada com AWS DMS](#CHAP_Source.PostgreSQL.RDSPostgreSQL.CDC).

**Topics**
+ [Trabalhando com bancos de dados PostgreSQL autogerenciados como fonte em AWS DMS](#CHAP_Source.PostgreSQL.Prerequisites)
+ [Trabalhando com bancos AWS de dados PostgreSQL gerenciados como fonte de DMS](#CHAP_Source.PostgreSQL.RDSPostgreSQL)
+ [Ativar a captura de dados de alteração (CDC) utilizando replicação lógica](#CHAP_Source.PostgreSQL.Security)
+ [Utilizar pontos de início nativos da CDC para configurar uma carga de CDC de uma origem PostgreSQL](#CHAP_Source.PostgreSQL.v10)
+ [Migrando do PostgreSQL para o PostgreSQL usando AWS DMS](#CHAP_Source.PostgreSQL.Homogeneous)
+ [Migração do Babelfish para o Amazon Aurora PostgreSQL usando AWS DMS](#CHAP_Source.PostgreSQL.Babelfish)
+ [Removendo AWS DMS artefatos de um banco de dados de origem do PostgreSQL](#CHAP_Source.PostgreSQL.CleanUp)
+ [Definições de configuração adicionais ao utilizar um banco de dados PostgreSQL como origem do DMS](#CHAP_Source.PostgreSQL.Advanced)
+ [Ler a réplica como origem do PostgreSQL](#CHAP_Source.PostgreSQL.ReadReplica)
+ [Utilizar a configuração de endpoint `MapBooleanAsBoolean` do PostgreSQL](#CHAP_Source.PostgreSQL.ConnectionAttrib.Endpointsetting)
+ [Configurações de endpoint e atributos extras de conexão (ECAs) ao usar o PostgreSQL como fonte de DMS](#CHAP_Source.PostgreSQL.ConnectionAttrib)
+ [Limitações ao utilizar um banco de dados PostgreSQL como origem do DMS](#CHAP_Source.PostgreSQL.Limitations)
+ [Tipos de dados de origem para o PostgreSQL](#CHAP_Source-PostgreSQL-DataTypes)

## Trabalhando com bancos de dados PostgreSQL autogerenciados como fonte em AWS DMS
<a name="CHAP_Source.PostgreSQL.Prerequisites"></a>

Com um banco de dados PostgreSQL autogerenciado como fonte, você pode migrar dados para outro banco de dados PostgreSQL ou para um dos outros bancos de dados de destino suportados pelo. AWS DMS A origem do banco de dados pode ser um banco de dados on-premises ou um mecanismo autogerenciado em execução em uma instância do Amazon EC2. É possível utilizar uma instância de banco de dados para tarefas de carga máxima e de captura de dados de alteração (CDC).

### Pré-requisitos para usar um banco de dados PostgreSQL autogerenciado como fonte AWS DMS
<a name="CHAP_Source.PostgreSQL.Prerequisites.SelfManaged"></a>

Antes de migrar dados de um banco de dados PostgreSQL de origem autogerenciado, faça o seguinte: 
+ Utilize um banco de dados PostgreSQL com a versão 9.4.x ou superior.
+ Para tarefas de carga máxima mais CDC ou tarefas de somente CDC, conceda permissões de superusuário para a conta de usuário especificada para o banco de dados de origem do PostgreSQL. A conta de usuário precisa de permissões de superusuário para acessar perfis específicos de replicação na origem. A conta de usuário do DMS precisa de permissões SELECT em todas as colunas para migrar tabelas com êxito. No caso de perda de permissões nas colunas, o DMS cria uma tabela de destino usando mapeamentos regulares de tipos de dados do DMS, o que provoca diferenças nos metadados e falhas nas tarefas.
+ Adicione o endereço IP do servidor de AWS DMS replicação ao arquivo de `pg_hba.conf` configuração e habilite a replicação e as conexões de soquete. Veja a seguir um exemplo.

  ```
              # Replication Instance
              host all all 12.3.4.56/00 md5
              # Allow replication connections from localhost, by a user with the
              # replication privilege.
              host replication dms 12.3.4.56/00 md5
  ```

  O arquivo de configuração `pg_hba.conf` do PostgreSQL controla a autenticação do cliente. (HBA significa autenticação baseada em host.) O arquivo é tradicionalmente armazenado no diretório de dados do cluster de banco de dados. 
+ Se você estiver configurando um banco de dados como fonte para replicação lógica usando consulte AWS DMS [Habilitando o CDC usando um banco de dados PostgreSQL autogerenciado como fonte AWS DMS](#CHAP_Source.PostgreSQL.Prerequisites.CDC)

**nota**  
Algumas AWS DMS transações ficam inativas por algum tempo antes que o mecanismo do DMS as use novamente. Com a utilização do parâmetro `idle_in_transaction_session_timeout` no PostgreSQL versões 9.6 e superior é possível fazer com que as transações ociosas atinjam o tempo limite e falhem. Não encerre transações ociosas quando você usar o AWS DMS. 

### Habilitando o CDC usando um banco de dados PostgreSQL autogerenciado como fonte AWS DMS
<a name="CHAP_Source.PostgreSQL.Prerequisites.CDC"></a>

AWS DMS suporta captura de dados de alteração (CDC) usando replicação lógica. Para ativar a replicação lógica de um banco de dados de origem do PostgreSQL autogerenciado, defina os seguintes parâmetros e valores no arquivo de configuração `postgresql.conf`:
+ Defina `wal_level = logical`.
+ Defina `max_replication_slots` como um valor maior que 1.

  Defina o valor de `max_replication_slots` de acordo com o número de tarefas a serem executadas. Por exemplo, para executar cinco tarefas, defina no mínimo cinco slots. Os slots são abertos automaticamente assim que uma tarefa é iniciada e permanecem abertos até mesmo quando a tarefa não está mais em execução. Exclua manualmente os slots abertos. Observe que o DMS descarta automaticamente os slots de replicação quando a tarefa é excluída, se o DMS tiver criado o slot.
+ Defina `max_wal_senders` como um valor maior que 1.

  O parâmetro `max_wal_senders` define o número de tarefas simultâneas que podem ser executadas.
+ O parâmetro `wal_sender_timeout` encerra as conexões de replicação que estão inativas por mais tempo do que o número de milissegundos especificado. O padrão para um banco de dados PostgreSQL on-premises é 60000 milissegundos (60 segundos). A definição do valor como 0 (zero) desativa o mecanismo de tempo limite e é uma configuração válida para o DMS.

  Ao definir `wal_sender_timeout` como um valor diferente de zero, uma tarefa do DMS com CDC requer um mínimo de 10000 milissegundos (10 segundos) e falha se o valor for menor que 10000. Mantenha o valor em menos de 5 minutos para evitar provocar um atraso durante um failover de multi-AZ de uma instância de replicação do DMS.

Alguns parâmetros são estáticos, e você só pode defini-los na inicialização do servidor. Quaisquer alterações nas entradas do arquivo de configuração (para um banco de dados autogerenciado) ou no grupo de parâmetros do banco de dados (para um banco de dados RDS para PostgreSQL) são ignoradas até que o servidor seja reiniciado. Para obter mais informações, consulte a [Documentação do PostgreSQL](https://www.postgresql.org/docs/current/intro-whatis.html).

Para obter mais informações sobre como ativar a CDC, consulte [Ativar a captura de dados de alteração (CDC) utilizando replicação lógica](#CHAP_Source.PostgreSQL.Security).

## Trabalhando com bancos AWS de dados PostgreSQL gerenciados como fonte de DMS
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL"></a>

Você pode usar uma instância AWS de banco de dados PostgreSQL gerenciada como fonte para. AWS DMSÉ possível executar tarefas de carga máxima e tarefas de captura de dados de alteração (CDC) utilizando uma origem PostgreSQL gerenciado pela AWS. 

### Pré-requisitos para usar um banco de dados AWS PostgreSQL gerenciado como fonte de DMS
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL.Prerequisites"></a>

Antes de migrar dados de um banco de dados de origem AWS PostgreSQL gerenciado, faça o seguinte:
+ Recomendamos que você use uma conta de AWS usuário com as permissões mínimas necessárias para a instância de banco de dados PostgreSQL como a conta de usuário para o endpoint de origem do PostgreSQL. AWS DMS A utilização de uma conta mestre não é recomendada. A conta deve ter o perfil `rds_superuser` e o perfil `rds_replication`. O perfil `rds_replication` concede permissões para gerenciar slots lógicos e transmitir dados utilizando slots lógicos.

  Crie vários objetos da conta do usuário mestre para a conta que você utiliza. Para obter mais informações sobre como criar esses objetos, consulte [Migrar um banco de dados Amazon RDS para PostgreSQL sem utilizar a conta de usuário mestre](#CHAP_Source.PostgreSQL.RDSPostgreSQL.NonMasterUser).
+ Se o banco de dados de origem estiver em uma nuvem privada virtual (VPC), selecione o grupo de segurança da VPC que fornece acesso à instância de banco de dados em que o banco de dados reside. Isso é necessário para que a instância de replicação do DMS se conecte com êxito à instância de banco de dados de origem. Quando o banco de dados e a instância de replicação do DMS estiverem na mesma VPC, adicione o grupo de segurança apropriado às suas próprias regras de entrada.

**nota**  
Algumas AWS DMS transações ficam inativas por algum tempo antes que o mecanismo do DMS as use novamente. Com a utilização do parâmetro `idle_in_transaction_session_timeout` no PostgreSQL versões 9.6 e superior é possível fazer com que as transações ociosas atinjam o tempo limite e falhem. Não encerre transações ociosas quando você usar o AWS DMS.

### Habilitando o CDC com uma instância de banco AWS de dados PostgreSQL gerenciada com AWS DMS
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL.CDC"></a>

AWS DMS oferece suporte ao CDC nos bancos de dados PostgreSQL do Amazon RDS quando a instância de banco de dados está configurada para usar a replicação lógica. A tabela a seguir resume a compatibilidade de replicação lógica de cada versão AWS gerenciada do PostgreSQL. 


|  Versão do PostgreSQL  |  AWS DMS suporte de carga total   |  AWS DMS Suporte CDC  | 
| --- | --- | --- | 
|  Aurora PostgreSQL versão 2.1 compatível com o PostgreSQL 10.5 (ou inferior)  |  Sim  |  Não  | 
|  Compatibilidade do Aurora PostgreSQL versão 2.2 com o PostgreSQL 10.6 (ou superior)   |  Sim  |  Sim  | 
|  Compatibilidade do RDS para PostgreSQL com o PostgreSQL 10.21 (ou superior)  |  Sim  |  Sim  | 

**Como ativar a replicação lógica para uma instância de banco de dados RDS PostgreSQL**

1. Use a conta de usuário AWS principal para a instância de banco de dados PostgreSQL como a conta de usuário para o endpoint de origem do PostgreSQL. A conta de usuário mestra tem as funções necessárias para permitir a configuração da captura de dados de alteração (CDC). 

   Se você utilizar uma conta diferente da conta de usuário mestre, deverá criar vários objetos da conta mestre para a conta utilizada. Para obter mais informações, consulte [Migrar um banco de dados Amazon RDS para PostgreSQL sem utilizar a conta de usuário mestre](#CHAP_Source.PostgreSQL.RDSPostgreSQL.NonMasterUser).

1. Defina o parâmetro `rds.logical_replication` no grupo de parâmetros do CLUSTER do banco de dados como 1. Esse parâmetro estático requer uma reinicialização da instância de banco de dados para entrar em vigor. Como parte da aplicação desse parâmetro, o AWS DMS define os parâmetros `wal_level`, `max_wal_senders`, `max_replication_slots` e `max_connections`. Essas alterações de parâmetros podem aumentar o log de gravação antecipada (WAL), portanto, só defina `rds.logical_replication` ao utilizar slots de replicação lógica.

1. O parâmetro `wal_sender_timeout` encerra as conexões de replicação que estão inativas por mais tempo do que o número de milissegundos especificado. O padrão para um banco AWS de dados PostgreSQL gerenciado é 30.000 milissegundos (30 segundos). A definição do valor como 0 (zero) desativa o mecanismo de tempo limite e é uma configuração válida para o DMS.

   Ao definir `wal_sender_timeout` como um valor diferente de zero, uma tarefa do DMS com CDC requer um mínimo de 10000 milissegundos (10 segundos) e falhará se o valor estiver entre 0 e 10000. Mantenha o valor em menos de 5 minutos para evitar provocar um atraso durante um failover de multi-AZ de uma instância de replicação do DMS.

1.  Verifique se o valor do parâmetro `max_worker_processes` no grupo de parâmetros do cluster do banco de dados é igual ou superior aos valores totais combinados de `max_logical_replication_workers``autovacuum_max_workers` e `max_parallel_workers`. Um alto número de processos de trabalho em segundo plano pode impactar as workloads das aplicações em instâncias pequenas. Portanto, monitore o desempenho do banco de dados se você definir um valor de `max_worker_processes` mais alto que o padrão.

1.  Ao usar o Aurora PostgreSQL como origem com CDC, defina `synchronous_commit` como `ON`.

**Como utilizar a réplica de leitura do cluster de banco de dados multi-AZ do PostgreSQL para CDC (replicação contínua)**

1. Defina os parâmetros `rds.logical_replication` e `sync_replication_slots` no grupo de parâmetros do CLUSTER de banco de dados como 1. Esses parâmetros estáticos requerem a reinicialização da instância de banco de dados para entrar em vigor.

1. Execute o seguinte comando para criar a tabela `awsdms_ddl_audit` no Gravador e substituir o `objects_schema` pelo nome do esquema a ser utilizado:

   ```
   CREATE TABLE objects_schema.awsdms_ddl_audit
   (
     c_key    bigserial primary key,
     c_time   timestamp,    -- Informational
     c_user   varchar(64),  -- Informational: current_user
     c_txn    varchar(16),  -- Informational: current transaction
     c_tag    varchar(24),  -- Either 'CREATE TABLE' or 'ALTER TABLE' or 'DROP TABLE'
     c_oid    integer,      -- For future use - TG_OBJECTID
     c_name   varchar(64),  -- For future use - TG_OBJECTNAME
     c_schema varchar(64),  -- For future use - TG_SCHEMANAME. For now - holds current_schema
     c_ddlqry  text         -- The DDL query associated with the current DDL event
   );
   ```

1. Execute o seguinte comando para criar uma função `awsdms_intercept_ddl` e substituir o `objects_schema` pelo nome do esquema a ser utilizado:

   ```
   CREATE OR REPLACE FUNCTION objects_schema.awsdms_intercept_ddl()
     RETURNS event_trigger
   LANGUAGE plpgsql
   SECURITY DEFINER
     AS $$
     declare _qry text;
   BEGIN
     if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE' or tg_tag = 'CREATE TABLE AS') then
            SELECT current_query() into _qry;
            insert into objects_schema.awsdms_ddl_audit
            values
            (
            default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry
            );
            delete from objects_schema.awsdms_ddl_audit;
   end if;
   END;
   $$;
   ```

1. Execute o seguinte comando para criar o gatilho de eventos `awsdms_intercept_ddl`:

   ```
   CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end EXECUTE PROCEDURE objects_schema.awsdms_intercept_ddl();
   ```

   Verifique se todos os usuários e perfis que acessam esses eventos têm as permissões de DDL necessárias. Por exemplo:

   ```
   grant all on public.awsdms_ddl_audit to public;
   grant all on public.awsdms_ddl_audit_c_key_seq to public;
   ```

1. Crie um slot de replicação no Gravador:

   ```
   SELECT * FROM pg_create_logical_replication_slot('dms_read_replica_slot', 'test_decoding', false, true);
   ```

1. Verifique se o slot de replicação está disponível no Leitor:

   ```
   select * from pg_catalog.pg_replication_slots where slot_name = 'dms_read_replica_slot';
   
   slot_name            |plugin       |slot_type|datoid|database|temporary|active|active_pid|xmin|catalog_xmin|restart_lsn|confirmed_flush_lsn|wal_status|safe_wal_size|two_phase|inactive_since               |conflicting|invalidation_reason|failover|synced|
   ---------------------+-------------+---------+------+--------+---------+------+----------+----+------------+-----------+-------------------+----------+-------------+---------+-----------------------------+-----------+-------------------+--------+------+
   dms_read_replica_slot|test_decoding|logical  |     5|postgres|false    |false |          |    |3559        |0/180011B8 |0/180011F0         |reserved  |             |true     |2025-02-10 15:45:04.083 +0100|false      |                   |false   |false |
   ```

1. Crie um endpoint de origem do DMS para a réplica de leitura e defina o nome do slot de replicação lógica por meio do atributo de conexão adicional:

   ```
   slotName=dms_read_replica_slot;
   ```

1. Crie e inicie a tarefa CDC/FL\$1CDC.
**nota**  
Para migrações CDC/FL\$1CDC, o DMS considera o horário de início da tarefa como uma posição inicial da CDC. Todos os mais antigos LSNs do slot de replicação são ignorados.

### Migrar um banco de dados Amazon RDS para PostgreSQL sem utilizar a conta de usuário mestre
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL.NonMasterUser"></a>

Em alguns casos, é possível não utilizar a conta de usuário mestre para a instância de banco de dados Amazon RDS PostgreSQL que você está utilizando como origem. Nesses casos, crie vários objetos para capturar os eventos da linguagem de definição de dados (DDL). Crie esses objetos utilizando uma conta diferente da conta mestrr e, depois, crie um acionador na conta de usuário mestre.

**nota**  
Se você definir a configuração do endpoint `CaptureDdls` como `false` no endpoint de origem, não precisará criar a tabela e o acionador a seguir no banco de dados de origem.

Utilize o procedimento a seguir para criar esses objetos.

**Como criar objetos**

1. Escolha um esquema onde os objetos serão criados. O esquema padrão é `public`. Verifique se o esquema existe e pode ser acessado pela conta `OtherThanMaster`. 

1. Faça login na instância de banco de dados PostgreSQL utilizando uma conta de usuário diferente da conta mestre, aqui a conta `OtherThanMaster`.

1. Crie a tabela `awsdms_ddl_audit` executando o comando a seguir, substituindo `objects_schema` no código seguinte pelo nome do esquema a ser utilizado.

   ```
   CREATE TABLE objects_schema.awsdms_ddl_audit
   (
     c_key    bigserial primary key,
     c_time   timestamp,    -- Informational
     c_user   varchar(64),  -- Informational: current_user
     c_txn    varchar(16),  -- Informational: current transaction
     c_tag    varchar(24),  -- Either 'CREATE TABLE' or 'ALTER TABLE' or 'DROP TABLE'
     c_oid    integer,      -- For future use - TG_OBJECTID
     c_name   varchar(64),  -- For future use - TG_OBJECTNAME
     c_schema varchar(64),  -- For future use - TG_SCHEMANAME. For now - holds current_schema
     c_ddlqry  text         -- The DDL query associated with the current DDL event
   );
   ```

1. Crie o perfil `awsdms_intercept_ddl` executando o comando a seguir, substituindo `objects_schema` no código seguinte pelo nome do esquema a ser utilizado.

   ```
   CREATE OR REPLACE FUNCTION objects_schema.awsdms_intercept_ddl()
     RETURNS event_trigger
   LANGUAGE plpgsql
   SECURITY DEFINER
     AS $$
     declare _qry text;
   BEGIN
     if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE' or tg_tag = 'CREATE TABLE AS') then
            SELECT current_query() into _qry;
            insert into objects_schema.awsdms_ddl_audit
            values
            (
            default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry
            );
            delete from objects_schema.awsdms_ddl_audit;
   end if;
   END;
   $$;
   ```

1. Faça logout da conta `OtherThanMaster` e faça login com uma conta que tenha o perfil `rds_superuser` atribuído.

1. Crie o trigger de evento `awsdms_intercept_ddl` executando o comando a seguir.

   ```
   CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end 
   EXECUTE PROCEDURE objects_schema.awsdms_intercept_ddl();
   ```

1. Verifique se todos os usuários e perfis que acessam esses eventos têm as permissões de DDL necessárias. Por exemplo:

   ```
   grant all on public.awsdms_ddl_audit to public;
   grant all on public.awsdms_ddl_audit_c_key_seq to public;
   ```

Ao concluir o procedimento anterior, você poderá criar o endpoint de origem do AWS DMS utilizando a conta `OtherThanMaster`.

**nota**  
Esses eventos são acionados pelas instruções `CREATE TABLE`, `ALTER TABLE` e `DROP TABLE`.

## Ativar a captura de dados de alteração (CDC) utilizando replicação lógica
<a name="CHAP_Source.PostgreSQL.Security"></a>

É possível utilizar o recurso de replicação lógica nativa do PostgreSQL para ativar a captura de dados de alteração (CDC) durante a migração do banco de dados de origens do PostgreSQL. É possível utilizar esse recurso com o PostgreSQL autogerenciado e também com uma instância do banco de dados Amazon RDS para PostgreSQL. Essa abordagem reduz o tempo de inatividade e ajuda a garantir que o banco de dados de destino esteja sincronizado com o banco de dados PostgreSQL de origem.

AWS DMS suporta CDC para tabelas PostgreSQL com chaves primárias. Se uma tabela não tiver uma chave primária, os logs de gravação antecipada (WAL) não incluirão uma imagem anterior da linha do banco de dados. Nesse caso, o DMS não pode atualizar a tabela. Aqui, é possível utilizar configurações adicionais e utilizar a identidade da réplica da tabela como uma solução alternativa. No entanto, essa abordagem pode gerar logs adicionais. É recomendável utilizar a identidade da réplica da tabela como solução alternativa somente após testes cuidadosos. Para obter mais informações, consulte [Definições de configuração adicionais ao utilizar um banco de dados PostgreSQL como origem do DMS](#CHAP_Source.PostgreSQL.Advanced).

**nota**  
A REPLICA IDENTITY FULL é compatível com um plug-in de decodificação lógica, mas não com um plug-in pglogical. Para obter mais informações, consulte a [Documentação do pglogical](https://github.com/2ndQuadrant/pglogical#primary-key-or-replica-identity-required).

Para tarefas de carga total e somente CDC e CDC, AWS DMS usa slots de replicação lógica para reter os registros do WAL para replicação até que os registros sejam decodificados. Ao reiniciar (não ao retomar) para uma carga máxima e uma tarefa de CDC ou uma tarefa de somente de CDC, o slot de replicação é recriado.

**nota**  
Para decodificação lógica, o DMS utiliza o plug-in test\$1decoding ou pglogical. Se o plug-in pglogical estiver disponível em um banco de dados PostgreSQL de origem, o DMS criará um slot de replicação utilizando pglogical, caso contrário, um plug-in test\$1decoding será utilizado. Para obter mais informações sobre o plug-in test\$1decoding, consulte a [Documentação do PostgreSQL](https://www.postgresql.org/docs/9.4/test-decoding.html).  
Se o parâmetro `max_slot_wal_keep_size` do banco de dados for definido como um valor não padrão e o `restart_lsn` de um slot de replicação ficar atrás do LSN atual em mais do que esse tamanho, a tarefa do DMS falhará devido à remoção dos arquivos WAL necessários.

### Configurar o plug-in pglogical
<a name="CHAP_Source.PostgreSQL.Security.Pglogical"></a>

Implementado como uma extensão do PostgreSQL, o plug-in pglogical é um sistema de replicação lógica e um modelo para replicação seletiva de dados. A tabela a seguir identifica as versões de origem do banco de dados PostgreSQL que são compatíveis com o plug-in pglogical.


|  Origem PostgreSQL   |  Compatível com o pglogical  | 
| --- | --- | 
|  PostgreSQL 9.4 autogerenciado ou superior  |  Sim  | 
|  Amazon RDS PostgreSQL 9.5 ou inferior  |  Não  | 
|  Amazon RDS PostgreSQL 9.6 ou superior  |  Sim  | 
|  Aurora PostgreSQL 1.x até 2.5.x  |  Não  | 
|  Aurora PostgreSQL 2.6.x ou superior  |  Sim  | 
|  Aurora PostgreSQL 3.3.x ou superior  |  Sim  | 

Antes de configurar o pglogical para uso com AWS DMS, primeiro habilite a replicação lógica para captura de dados de alteração (CDC) em seu banco de dados de origem do PostgreSQL. 
+ Para obter informações sobre como ativar a replicação lógica para CDC em bancos de dados de origem PostgreSQL *autogerenciados*, consulte [Habilitando o CDC usando um banco de dados PostgreSQL autogerenciado como fonte AWS DMS](#CHAP_Source.PostgreSQL.Prerequisites.CDC)
+ Para obter informações sobre como ativar a replicação lógica para CDC em bancos de dados de origem PostgreSQL *gerenciado pela AWS*, consulte [Habilitando o CDC com uma instância de banco AWS de dados PostgreSQL gerenciada com AWS DMS](#CHAP_Source.PostgreSQL.RDSPostgreSQL.CDC).

Depois que a replicação lógica estiver ativada no banco de dados de origem PostgreSQL, utilize as etapas a seguir para configurar o pglogical para utilização com o DMS.

**Para usar o plug-in pglogical para replicação lógica em um banco de dados de origem PostgreSQL com AWS DMS**

1. Crie uma extensão de pglogical no banco de dados de origem PostgreSQL:

   1. Defina o parâmetro correto:
      + Para bancos de dados PostgreSQL autogerenciados, defina o parâmetro `shared_preload_libraries= 'pglogical'` do banco de dados.
      + Para o PostgreSQL nos bancos de dados Amazon RDS e Amazon Aurora edição compatível com o PostgreSQL, defina o parâmetro `shared_preload_libraries` como `pglogical` no mesmo grupo de parâmetros do RDS.

   1. Reinicie o banco de dados de origem PostgreSQL.

   1. No banco de dados PostgreSQL, execute o comando `create extension pglogical;`.

1. Execute o comando a seguir para verificar se a instalação do pglogical foi bem-sucedida:

   `select * FROM pg_catalog.pg_extension`

Agora você pode criar uma AWS DMS tarefa que realiza a captura de dados de alteração para o endpoint do banco de dados de origem do PostgreSQL.

**nota**  
Se você não ativar o pglogical no banco de dados de origem PostgreSQL, o AWS DMS utilizará o plug-in `test_decoding` por padrão. Quando pglogical está habilitado para decodificação lógica, AWS DMS usa pglogical por padrão. Mas é possível definir o atributo de conexão adicional, para que o `PluginName` utilize o plug-in `test_decoding` em vez disso.

## Utilizar pontos de início nativos da CDC para configurar uma carga de CDC de uma origem PostgreSQL
<a name="CHAP_Source.PostgreSQL.v10"></a>

Para ativar os pontos de início nativos da CDC com o PostgreSQL como origem, defina o atributo de conexão adicional `slotName` como o nome de um slot de replicação lógica existente ao criar o endpoint. Esse slot de replicação lógica mantém as alterações contínuas desde a hora da criação do endpoint, portanto, ele é compatível com a replicação de um ponto no tempo. 

O PostgreSQL grava as alterações do banco de dados em arquivos WAL que são descartados somente depois que o AWS DMS faz a leitura das alterações do slot de replicação lógica com êxito. O uso de slots de replicação lógica pode impedir que as alterações registradas sejam excluídas antes de serem consumidas pelo mecanismo de replicação. 

No entanto, dependendo da taxa de alteração e consumo, as alterações mantidas em um slot de replicação lógica podem causar a utilização elevado do disco. É recomendável definir alarmes de utilização de espaço na instância de origem PostgreSQL ao utilizar slots de replicação lógica. Para obter mais informações sobre como definir o atributo de conexão adicional `slotName`, consulte [Configurações de endpoint e atributos extras de conexão (ECAs) ao usar o PostgreSQL como fonte de DMS](#CHAP_Source.PostgreSQL.ConnectionAttrib).

O procedimento a seguir demonstra essa abordagem com mais detalhes.

**Como utilizar um ponto inide início nativo da CDC para configurar uma carga de CDC de um endpoint de origem PostgreSQL**

1. Identifique o slot de replicação lógica utilizado por uma tarefa de replicação anterior (uma tarefa pai) que você queira utilizar como ponto de partida. Consulte a visualização `pg_replication_slots` no banco de dados de origem para se certificar de que esse slot não tenha conexões ativas. Se isso acontecer, resolva-os e feche-os antes de continuar.

   Para as etapas a seguir, vamos supor que o slot de replicação lógica seja `abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef`. 

1. Crie um novo endpoint de origem que inclua a configuração de atributo de conexão adicional a seguir.

   ```
   slotName=abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef;
   ```

1. Crie uma nova tarefa somente para CDC usando o console AWS CLI ou AWS DMS a API. Por exemplo, utilizando a CLI, é possível executar o seguinte comando `create-replication-task`. 

   ```
   aws dms create-replication-task --replication-task-identifier postgresql-slot-name-test 
   --source-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ABCD1EFGHIJK2LMNOPQRST3UV4 
   --target-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ZYX9WVUTSRQONM8LKJIHGF7ED6 
   --replication-instance-arn arn:aws:dms:us-west-2:012345678901:rep:AAAAAAAAAAA5BB4CCC3DDDD2EE 
   --migration-type cdc --table-mappings "file://mappings.json" --cdc-start-position "4AF/B00000D0" 
   --replication-task-settings "file://task-pg.json"
   ```

   No comando anterior, as seguintes opções são definidas:
   + A opção `source-endpoint-arn` é definida como o valor criado na etapa 2.
   + A opção `replication-instance-arn` é definida como o mesmo valor da tarefa pai da etapa 1.
   + As opções `table-mappings` e `replication-task-settings` são definidas como os mesmos valores da tarefa pai na etapa 1.
   + A opção `cdc-start-position` é definida como um valor de posição de início. Para localizar essa posição de início, consulte a visualização `pg_replication_slots` no banco de dados de origem ou visualize os detalhes do console da tarefa pai na etapa 1. Para obter mais informações, consulte [Determinar um ponto de início de CDC nativo](CHAP_Task.CDC.md#CHAP_Task.CDC.StartPoint.Native).

   Para ativar o modo de início personalizado do CDC ao criar uma nova tarefa somente para CDC usando o AWS DMS console, faça o seguinte:
   + Na seção **Configurações da tarefa**, em **Modo de início da CDC para transações de origem**, escolha **Ativar o modo de início da CDC personalizado**.
   + Em **Ponto de início da CDC personalizado para transações de origem**, escolha **Especificar um número de sequência de log**. Especifique o número de alteração do sistema ou escolha **Especificar um ponto de verificação de recuperação** e forneça um ponto de verificação de recuperação.

   Quando essa tarefa do CDC é AWS DMS executada, gera um erro se o slot de replicação lógica especificado não existir. Ele também gerará um erro se a tarefa não for criada com uma configuração válida para `cdc-start-position`.

Ao utilizar pontos de início nativos da CDC com o plug-in pglogical e quiser utilizar um novo slot de replicação, conclua as etapas de configuração a seguir antes de criar uma tarefa de CDC. 

**Como utilizar um novo slot de replicação não criado anteriormente como parte de outra tarefa do DMS**

1. Crie um slot de replicação, conforme mostrado a seguir:

   ```
   SELECT * FROM pg_create_logical_replication_slot('replication_slot_name', 'pglogical');
   ```

1. Depois que o banco de dados criar o slot de replicação, obtenha e anote os valores de **restart\$1lsn** e de **confirmed\$1flush\$1lsn** do slot:

   ```
   select * from pg_replication_slots where slot_name like 'replication_slot_name';
   ```

   Observe que a posição de início da CDC nativo para uma tarefa de CDC criada após o slot de replicação não pode ser mais antiga do que o valor de **confirmed\$1flush\$1lsn**.

   Para obter informações sobre os valores de **restart\$1lsn** e de **confirmed\$1flush\$1lsn**, consulte [pg\$1replication\$1slots](https://www.postgresql.org/docs/14/view-pg-replication-slots.html) 

1. Crie um nó pglogical.

   ```
   SELECT pglogical.create_node(node_name := 'node_name', dsn := 'your_dsn_name');
   ```

1. Crie dois conjuntos de replicação utilizando o perfil `pglogical.create_replication_set`. O primeiro conjunto de replicação rastreia as atualizações e as exclusões das tabelas que têm chaves primárias. O segundo conjunto de replicação rastreia somente inserções e tem o mesmo nome do primeiro conjunto de replicação, com o prefixo 'i' adicionado.

   ```
   SELECT pglogical.create_replication_set('replication_slot_name', false, true, true, false);
   SELECT pglogical.create_replication_set('ireplication_slot_name', true, false, false, true);
   ```

1. Adicione uma tabela ao conjunto de réplicas.

   ```
   SELECT pglogical.replication_set_add_table('replication_slot_name', 'schemaname.tablename', true);
   SELECT pglogical.replication_set_add_table('ireplication_slot_name', 'schemaname.tablename', true);
   ```

1. Defina o atributo de conexão adicional (ECA) a seguir ao criar o endpoint de origem.

   ```
   PluginName=PGLOGICAL;slotName=slot_name;
   ```

Agora é possível criar uma tarefa somente de CDC com um ponto de início nativo do PostgreSQL utilizando o novo slot de replicação. Para obter mais informações sobre o plug-in pglogical, consulte a [Documentação do pglogical 3.7](https://www.enterprisedb.com/docs/pgd/3.7/pglogical/)

## Migrando do PostgreSQL para o PostgreSQL usando AWS DMS
<a name="CHAP_Source.PostgreSQL.Homogeneous"></a>

Quando você migra de um mecanismo de banco de dados diferente do PostgreSQL para um banco de dados PostgreSQL, é quase sempre a melhor ferramenta AWS DMS de migração a ser usada. No entanto, ao migrar de um banco de dados PostgreSQL para um banco de dados PostgreSQL, as ferramentas do PostgreSQL podem ser mais eficazes.

### Utilize ferramentas nativas do PostgreSQL para migrar dados
<a name="CHAP_Source.PostgreSQL.Homogeneous.Native"></a>

É recomendável utilizar ferramentas nativas de migração do banco de dados PostgreSQL, como `pg_dump`, nas seguintes condições: 
+ Quando há uma migração homogênea, na qual você migra de um banco de dados PostgreSQL de origem para um banco de dados PostgreSQL de destino. 
+ Quando for migrar um banco de dados inteiro.
+ As ferramentas nativas permitem que você migre os dados com um tempo mínimo de inatividade. 

O utilitário pg\$1dump utiliza o comando COPY para criar um esquema e um despejo de dados de um banco de dados PostgreSQL. O script de despejo gerado pelo pg\$1dump carrega os dados em um banco de dados com o mesmo nome e recria as tabelas, os índices e as chaves estrangeiras. Para restaurar os dados para um banco de dados com outro nome, utilize o comando `pg_restore` e o parâmetro `-d`.

Se estiver migrando dados de um banco de dados de origem PostgreSQL sendo executado no EC2 para um destino Amazon RDS para PostgreSQL, você poderá utilizar o plug-in pglogical.

Para obter mais informações sobre como importar de um banco de dados PostgreSQL para o Amazon RDS para PostgreSQL ou para a edição do Amazon Aurora compatível com PostgreSQL, consulte [https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html).

### Utilizar o DMS para migrar dados do PostgreSQL para o PostgreSQL
<a name="CHAP_Source.PostgreSQL.Homogeneous.DMS"></a>

 AWS DMS pode migrar dados, por exemplo, de um banco de dados PostgreSQL de origem que está no local para uma instância de destino do Amazon RDS for PostgreSQL ou do Aurora PostgreSQL. Os tipos de dados do PostgreSQL fundamentais ou básicos geralmente migram com êxito.

**nota**  
Ao replicar tabelas particionadas de uma origem PostgreSQL para o destino PostgreSQL, você não precisa mencionar a tabela pai como parte dos critérios de seleção na tarefa do DMS. Mencionar a tabela principal faz com que os dados sejam duplicados nas tabelas filho no destino, possivelmente causando uma violação de PK. Ao selecionar apenas as tabelas filho nos critérios de seleção do mapeamento de tabelas, a tabela pai é preenchida automaticamente.

Os tipos de dados compatíveis com o banco de dados de origem, mas que não são compatíveis com o destino, podem não ser migrados com êxito. AWS DMS transmite alguns tipos de dados como cadeias de caracteres se o tipo de dados for desconhecido. Alguns tipos de dados, como XML e JSON, podem ser migrados com êxito como arquivos pequenos, mas podem falhar se forem documentos grandes. 

Ao executar a migração do tipo de dados, lembre-se de que:
+ Em alguns casos, o tipo de dados PostgreSQL NUMERIC(p,s) não especifica nenhuma precisão e escala. Nas versões 3.4.2 e anteriores do DMS, o DMS utiliza uma precisão de 28 e uma escala de 6 por padrão, NUMERIC(28,6). Por exemplo, o valor 0,611111104488373 da origem é convertido em 0,611111 no destino do PostgreSQL.
+ Uma tabela com o tipo de dados ARRAY deve ter uma chave primária. Uma tabela com um tipo de dados ARRAY sem uma chave primária é suspensa durante a carga máxima.

A tabela a seguir mostra os tipos de dados do PostgreSQL de origem e se podem ser migrados com êxito.


| Tipo de dados | Será migrado com êxito | Migra parcialmente | Não migra | Comentários | 
| --- | --- | --- | --- | --- | 
| INTEGER | X |  |  |  | 
| SMALLINT | X |  |  |  | 
| BIGINT | X |  |  |  | 
| NUMERIC/DECIMAL(p,s) |  | X |  | Em que 0<p<39 e 0<s | 
| NUMERIC/DECIMAL |  | X |  | Em que p>38 ou p=s=0 | 
| REAL | X |  |  |  | 
| DOUBLE | X |  |  |  | 
| SMALLSERIAL | X |  |  |  | 
| SERIAL | X |  |  |  | 
| BIGSERIAL | X |  |  |  | 
| MONEY | X |  |  |  | 
| CHAR |  | X |  | Sem precisão especificada | 
| CHAR(n) | X |  |  |  | 
| VARCHAR |  | X |  | Sem precisão especificada | 
| VARCHAR(n) | X |  |  |  | 
| TEXT | X |  |  |  | 
| BYTEA | X |  |  |  | 
| TIMESTAMP | X |  |  | Os valores infinitos positivos e negativos são truncados para '9999-12-31 23:59:59' e '4713-01-01 00:00:00 BC', respectivamente. | 
| TIMESTAMP WITH TIME ZONE |  | X |  |  | 
| DATE | X |  |  |  | 
| TIME | X |  |  |  | 
| TIME WITH TIME ZONE | X |  |  |  | 
| INTERVAL |  | X |  |  | 
| BOOLEAN | X |  |  |  | 
| ENUM |  |  | X |  | 
| CIDR | X |  |  |  | 
| INET |  |  | X |  | 
| MACADDR |  |  | X |  | 
| TSVECTOR |  |  | X |  | 
| TSQUERY |  |  | X |  | 
| XML |  | X |  |  | 
| POINT | X |  |  | Tipo de dados espaciais do PostGIS | 
| LINE |  |  | X |  | 
| LSEG |  |  | X |  | 
| BOX |  |  | X |  | 
| PATH |  |  | X |  | 
| POLYGON | X |  |  | Tipo de dados espaciais do PostGIS | 
| CIRCLE |  |  | X |  | 
| JSON |  | X |  |  | 
| ARRAY | X |  |  | Requer chave primária | 
| COMPOSITE |  |  | X |  | 
| RANGE |  |  | X |  | 
| LINESTRING | X |  |  | Tipo de dados espaciais do PostGIS | 
| MULTIPOINT | X |  |  | Tipo de dados espaciais do PostGIS | 
| MULTILINESTRING | X |  |  | Tipo de dados espaciais do PostGIS | 
| MULTIPOLYGON | X |  |  | Tipo de dados espaciais do PostGIS | 
| GEOMETRYCOLLECTION | X |  |  | Tipo de dados espaciais do PostGIS | 

### Migrar tipos de dados espaciais do PostGIS
<a name="CHAP_Source.PostgreSQL.DataTypes.Spatial"></a>

*Dados espaciais* identificam a informação de geometria de um objeto ou local no espaço. Os bancos de dados relacionais de objetos PostgreSQL são compatíveis com os tipos de dados espaciais do PostGIS. 

Antes de migrar objetos de dados espaciais do PostgreSQL, verifique se o plug-in PostGIS está ativado no nível global. Isso garante a AWS DMS criação exata das colunas de dados espaciais de origem para a instância de banco de dados de destino do PostgreSQL.

Para AWS DMS migrações homogêneas de PostgreSQL para PostgreSQL, suporta a migração de tipos e subtipos de objetos de dados geométricos e geográficos (coordenadas geodésicas) PostGIS, como os seguintes:
+  POINT 
+  LINESTRING 
+  POLYGON 
+  MULTIPOINT 
+  MULTILINESTRING 
+  MULTIPOLYGON 
+  GEOMETRYCOLLECTION 

## Migração do Babelfish para o Amazon Aurora PostgreSQL usando AWS DMS
<a name="CHAP_Source.PostgreSQL.Babelfish"></a>

Você pode migrar as tabelas de origem do PostgreSQL do Babelfish for Aurora para qualquer endpoint de destino compatível usando o. AWS DMS

Ao criar seu endpoint de AWS DMS origem usando o console do DMS, a API ou os comandos da CLI, você define a origem como **Amazon Aurora PostgreSQL** e o nome do banco de dados como. **babelfish\$1db** Na seção **Configurações do Endpoint**, verifique se o **DatabaseMode**está definido como **Babelfish** e **BabelfishDatabaseName**está definido como o nome do banco de dados Babelfish T-SQL de origem. Em vez de usar a porta TCP **1433** do Babelfish, use a porta TCP **5432** do Aurora PostgreSQL.

Crie as tabelas antes de migrar os dados para garantir que o DMS utilize os tipos de dados e metadados de tabela corretos. Se você não criar as tabelas no destino antes de executar a migração, o DMS poderá criar as tabelas com tipos de dados e permissões incorretos.

### Adicionar regras de transformação à tarefa de migração
<a name="CHAP_Source.PostgreSQL.Babelfish.Transform"></a>

Ao criar uma tarefa de migração para uma origem do Babelfish, inclua regras de transformação que garantam que o DMS utilize as tabelas de destino pré-criadas.

Se você definiu o modo de migração de vários bancos de dados ao definir seu cluster do Babelfish para PostgreSQL, adicione uma regra de transformação que renomeia o nome do esquema para o esquema do T-SQL. Por exemplo, se o nome do esquema do T-SQL for `dbo` e o nome do esquema do Babelfish para PostgreSQL for `mydb_dbo`, renomeie o esquema para `dbo` utilizando uma regra de transformação. Para encontrar o nome do esquema do PostgreSQL, consulte [Arquitetura do Babelfish](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/babelfish-architecture.html) no *Guia do usuário do Amazon Aurora*. 

Se você utilizar o modo de banco de dados único, não será necessário usar uma regra de transformação para renomear os esquemas de bancos de dados. Os nomes dos esquemas do PostgreSQL têm one-to-one um mapeamento para os nomes dos esquemas no banco de dados T-SQL.

O exemplo de regra de transformação a seguir mostra como renomear o nome do esquema de `mydb_dbo` de volta para `dbo`:

```
{
    "rules": [
        {
            "rule-type": "transformation",
            "rule-id": "566251737",
            "rule-name": "566251737",
            "rule-target": "schema",
            "object-locator": {
                "schema-name": "mydb_dbo"
            },
            "rule-action": "rename",
            "value": "dbo",
            "old-value": null
        },
        {
            "rule-type": "selection",
            "rule-id": "566111704",
            "rule-name": "566111704",
            "object-locator": {
                "schema-name": "mydb_dbo",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        }
    ]
}
```

### Limitações ao utilizar um endpoint de origem do PostgreSQL com tabelas do Babelfish
<a name="CHAP_Source.PostgreSQL.Babelfish.Limitations"></a>

As limitações a seguir se aplicam ao utilizar um endpoint de origem do PostgreSQL com tabelas do Babelfish:
+ O DMS é compatível somente com a migração do Babelfish versão 16.2/15.6 e posterior e do DMS versão 3.5.3 e posterior.
+ O DMS não replica as alterações na definição de tabelas do Babelfish para o endpoint de destino. Uma solução alternativa para essa limitação é primeiro aplicar as alterações na definição das tabelas no destino e, em seguida, alterar a definição das tabelas na origem do Babelfish.
+ Quando você cria tabelas do Babelfish com o tipo de dados BYTEA, o DMS as converte para o tipo de dados `varbinary(max)` ao migrar para o SQL Server como destino.
+ O DMS não é compatível com o modo LOB completo para tipos de dados binários. Em vez disso, use o modo LOB limitado para tipos de dados binários.
+ O DMS não é compatível com a validação de dados no Babelfish como origem.
+ Para a definição da tarefa **Modo de preparação da tabela de destino**, use somente os modos **Não fazer nada** ou **Truncar**. Não utilize o modo **Abandonar tabelas no destino**. Ao utilizar **Abandonar tabelas no destino**, o DMS poderá criar as tabelas com tipos de dados incorretos.
+ Ao utilizar a replicação contínua (CDC ou carga máxima e CDC), defina o atributo de conexão adicional (ECA) `PluginName` como `TEST_DECODING`.
+ O DMS não é compatível com replicação (CDC ou carga máxima e CDC) de tabelas particionadas no Babelfish como origem.

## Removendo AWS DMS artefatos de um banco de dados de origem do PostgreSQL
<a name="CHAP_Source.PostgreSQL.CleanUp"></a>

Para capturar eventos DDL, AWS DMS cria vários artefatos no banco de dados PostgreSQL quando uma tarefa de migração é iniciada. Quando a tarefa é concluída, é recomendável remover esses artefatos.

Para remover os artefatos, execute os comandos a seguir (na ordem em que são exibidos), em que `{AmazonRDSMigration}` é o esquema no qual os artefatos foram criados: O descarte de um esquema deve ser feito com extremo cuidado. Nunca descarte um esquema operacional, especialmente um esquema que seja público.

```
drop event trigger awsdms_intercept_ddl;
```

O gatilho de eventos não pertence a um esquema específico.

```
drop function {AmazonRDSMigration}.awsdms_intercept_ddl()
drop table {AmazonRDSMigration}.awsdms_ddl_audit
drop schema {AmazonRDSMigration}
```

## Definições de configuração adicionais ao utilizar um banco de dados PostgreSQL como origem do DMS
<a name="CHAP_Source.PostgreSQL.Advanced"></a>

É possível adicionar definições de configuração ao migrar dados de um banco de dados PostgreSQL de duas maneiras:
+ É possível adicionar valores ao atributo de conexão adicional para capturar eventos de DDL e especificar o esquema no qual os artefatos de banco de dados DDL operacionais são criados. Para obter mais informações, consulte [Configurações de endpoint e atributos extras de conexão (ECAs) ao usar o PostgreSQL como fonte de DMS](#CHAP_Source.PostgreSQL.ConnectionAttrib).
+ É possível substituir os parâmetros da string de conexão. Escolha esta opção para realizar uma das seguintes ações:
  + Especifique AWS DMS os parâmetros internos. Esses parâmetros são raramente necessários e, portanto, não são expostos na interface do usuário.
  + Especifique valores de passagem (passthru) para o cliente de banco de dados específico. AWS DMS inclui parâmetros de passagem na cadeia de conexão passada para o cliente do banco de dados.
+ Ao usar o parâmetro em nível de tabela nas versões 9.4 e posteriores `REPLICA IDENTITY` do PostgreSQL, você pode controlar as informações gravadas em registros de gravação antecipada (). WALs Em particular, ele faz isso para identificar linhas WALs que são atualizadas ou excluídas. `REPLICA IDENTITY FULL`registra os valores antigos de todas as colunas na linha. Use `REPLICA IDENTITY FULL` com cuidado para cada tabela, pois pode `FULL` gerar um número extra WALs que pode não ser necessário. Para obter mais informações, consulte [ALTER TABLE-REPLICA IDENTITY](https://www.postgresql.org/docs/devel/sql-altertable.html) 

## Ler a réplica como origem do PostgreSQL
<a name="CHAP_Source.PostgreSQL.ReadReplica"></a>

Use réplicas de leitura do PostgreSQL como fontes de CDC para reduzir a carga do banco de dados AWS DMS primário. Esse recurso está disponível no PostgreSQL 16.x e AWS DMS requer a versão 3.6.1 ou posterior. O uso de réplicas de leitura para processamento de CDC reduz o impacto operacional em seu banco de dados primário.

**nota**  
A versão 16.x do Amazon RDS para PostgreSQL tem limitações quanto à replicação lógica de réplicas de leitura nas configurações three-AZ (TAZ). Para obter suporte completo à replicação lógica de réplicas de leitura em implantações TAZ, você deve usar o PostgreSQL versão 17.x ou posterior.

### Pré-requisitos
<a name="CHAP_Source.PostgreSQL.ReadReplica.prereq"></a>

Antes de usar uma réplica de leitura como fonte de CDC para AWS DMS, você deve habilitar a replicação lógica na instância primária do banco de dados e em sua réplica de leitura para criar decodificação lógica em uma réplica de leitura. Execute as seguintes ações:
+ Habilite a replicação lógica na instância de banco de dados primário e em sua réplica de leitura com quaisquer outros parâmetros de banco de dados necessários. Para obter mais informações, consulte [Trabalhando com bancos AWS de dados PostgreSQL gerenciados como fonte de DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.RDSPostgreSQL).
+ Para tarefas somente de CDC, crie um slot de replicação na instância primária (gravadora). Para ter mais informações, consulte [Utilizar pontos de início nativos da CDC para configurar uma carga de CDC de uma origem PostgreSQL](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.v10). Essa ação é necessária, pois não é possível criar um slot de replicação em réplicas de leitura.
+ Para o PostgreSQL versão 16, o slot deve ser criado manualmente na réplica de leitura.
+ Para o PostgreSQL versão 17 e posterior, o slot de replicação deve ser criado no primário e sincronizado automaticamente com a réplica de leitura.
+ Ao usar Full Load \$1 CDC ou tarefas somente CDC, AWS DMS pode gerenciar automaticamente os slots de replicação lógica nas instâncias primárias, mas não nas réplicas de leitura. Em relação a réplicas de leitura do PostgreSQL versão 16, elimine e recrie manualmente os slots de replicação antes de reiniciar uma tarefa (não a retomar). Ignorar essa etapa pode causar falhas na tarefa ou posições de início de CDC incorretas. A partir da versão 17 do PostgreSQL, a sincronização lógica de slots da instância primária automatiza esse processo.

Depois de concluir os pré-requisitos, você pode configurar seu endpoint de origem com a replicação `SlotName` da AWS DMS fonte da réplica de leitura nas configurações do endpoint e configurar sua AWS DMS tarefa usando pontos iniciais nativos do CDC. Para obter mais informações, consulte [Configurações de endpoint e atributos extras de conexão (ECAs) ao usar o PostgreSQL como fonte de DMS [e Usar pontos de partida nativos do CDC para configurar uma carga CDC de uma](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.v10) fonte do PostgreSQL](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.ConnectionAttrib).

## Utilizar a configuração de endpoint `MapBooleanAsBoolean` do PostgreSQL
<a name="CHAP_Source.PostgreSQL.ConnectionAttrib.Endpointsetting"></a>

É possível utilizar as configurações de endpoint do PostgreSQL para mapear um booleano como um booleano da origem PostgreSQL para um destino Amazon Redshift. Por padrão, um tipo BOOLEAN é migrado como varchar(5). É possível especificar `MapBooleanAsBoolean` para permitir que o PostgreSQL migre o tipo booleano como booleano, conforme mostrado no exemplo a seguir.

```
--postgre-sql-settings '{"MapBooleanAsBoolean": true}'
```

Observe que você deve definir essa configuração nos endpoints de origem e de destino para que ela tenha efeito.

Como o MySQL não tem um tipo BOOLEAN, utilize uma regra de transformação em vez dessa configuração ao migrar dados BOOLEAN para o MySQL.

## Configurações de endpoint e atributos extras de conexão (ECAs) ao usar o PostgreSQL como fonte de DMS
<a name="CHAP_Source.PostgreSQL.ConnectionAttrib"></a>

Você pode usar configurações de endpoint e atributos extras de conexão (ECAs) para configurar seu banco de dados de origem do PostgreSQL. Você especifica as configurações do endpoint ao criar o endpoint de origem usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--postgre-sql-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações do endpoint e ECAs que você pode usar com o PostgreSQL como fonte.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.PostgreSQL.html)

## Limitações ao utilizar um banco de dados PostgreSQL como origem do DMS
<a name="CHAP_Source.PostgreSQL.Limitations"></a>

As limitações a seguir se aplicam à utilização do PostgreSQL como uma origem do AWS DMS:
+ AWS DMS não funciona com o Amazon RDS for PostgreSQL 10.4 ou o Amazon Aurora PostgreSQL 10.4 como origem ou destino.
+ Uma tabela capturada deve ter uma chave primária. Se uma tabela não tiver uma chave primária, AWS DMS ignorará as operações de registro DELETE e UPDATE dessa tabela. Como solução alternativa, consulte [Ativar a captura de dados de alteração (CDC) utilizando a replicação lógica](#CHAP_Source.PostgreSQL.Security). 

  **Observação:** não recomendamos migrar sem um Key/Unique índice primário, caso contrário, limitações adicionais se aplicam, como a capacidade de aplicação em lote “NÃO”, a capacidade de LOB completa, a validação de dados e a incapacidade de replicar para o destino do Redshift de forma eficiente.
+ AWS DMS ignora uma tentativa de atualizar um segmento de chave primária. Nesses casos, o destino identifica a atualização como uma que não atualizou nenhuma linha. No entanto, como os resultados da atualização de uma chave primária no PostgreSQL são imprevisíveis, nenhum registro é gravado na tabela de exceções.
+ AWS DMS não suporta a opção **Iniciar alterações do processo a partir da execução do carimbo de data/hora**.
+ AWS DMS não replica as alterações resultantes de operações de partição ou subpartição (`ADD``DROP`, ou`TRUNCATE`).
+ A replicação de várias tabelas com o mesmo nome em que cada nome tem um caso diferente (por exemplo, tabela1 e Tabela1) pode TABLE1 causar um comportamento imprevisível. Devido a esse problema, AWS DMS não oferece suporte a esse tipo de replicação.
+ Na maioria dos casos, AWS DMS oferece suporte ao processamento de alterações das instruções DDL CREATE, ALTER e DROP para tabelas. AWS DMS não suporta esse processamento de alterações se as tabelas forem mantidas em um bloco interno de corpo de função ou procedimento ou em outras construções aninhadas.

  Por exemplo, a seguinte alteração não é capturada.

  ```
  CREATE OR REPLACE FUNCTION attu.create_distributors1() RETURNS void
  LANGUAGE plpgsql
  AS $$
  BEGIN
  create table attu.distributors1(did serial PRIMARY KEY,name
  varchar(40) NOT NULL);
  END;
  $$;
  ```
+ Atualmente, os tipos de dados `boolean` em uma origem do PostgreSQL são migrados para um destino do SQL Server como o tipo de dados `bit` com valores inconsistentes. Como solução alternativa, pré-crie a tabela com um tipo de `VARCHAR(1)` dados para a coluna (ou AWS DMS crie a tabela). Depois, deixe o processamento downstream tratar um "F" como Falso e um "T" como Verdadeiro.
+ AWS DMS não suporta o processamento de alterações das operações TRUNCATE.
+ O tipo de dados OID LOB não é migrado para o destino.
+ AWS DMS suporta o tipo de dados PostGIS somente para migrações homogêneas.
+ Se a origem for um banco de dados PostgreSQL on-premises ou em uma instância do Amazon EC2, verifique se o plug-in de saída test\$1decoding está instalado no endpoint de origem. É possível encontrar esse plug-in no pacote contrib do PostgreSQL. Para obter mais informações sobre o plug-in de teste de decodificação, consulte a [documentação do PostgreSQL](https://www.postgresql.org/docs/10/static/test-decoding.html).
+ AWS DMS não oferece suporte ao processamento de alterações para definir e cancelar a definição dos valores padrão da coluna (usando a cláusula ALTER COLUMN SET DEFAULT nas instruções ALTER TABLE).
+ AWS DMS não oferece suporte ao processamento de alterações para definir a nulidade da coluna (usando a cláusula ALTER COLUMN [SET\$1DROP] NOT NULL nas instruções ALTER TABLE).
+ Quando a replicação lógica está ativada, o número máximo de alterações mantidas na memória por transação é de 4 MB. Depois disso, as alterações são transferidas para o disco. Como resultado, `ReplicationSlotDiskUsage` aumenta e `restart_lsn` não avança até que a transação seja concluída ou interrompida e a reversão seja concluída. Como é uma transação longa, ela pode demorar muito tempo para reverter. Portanto, evite transações de longa execução ou várias subtransações quando a replicação lógica estiver habilitada. Em vez disso, divida a transação em várias transações menores. 

  Nas versões 13 e posteriores do Aurora PostgreSQL, você pode ajustar o parâmetro `logical_decoding_work_mem` para controlar quando o DMS despeja dados de alteração para o disco. Para obter mais informações, consulte [Arquivos de despejo no Aurora PostgreSQL](CHAP_Troubleshooting_Latency_Source_PostgreSQL.md#CHAP_Troubleshooting_Latency_Source_PostgreSQL_Spill).
+ Uma tabela com o tipo de dados ARRAY deve ter uma chave primária. Uma tabela com um tipo de dados ARRAY sem uma chave primária é suspensa durante a carga máxima.
+ AWS DMS [não oferece suporte à migração de metadados de tabela relacionados ao particionamento ou herança de tabelas.](https://www.postgresql.org/docs/15/ddl-inherit.html) Ao AWS DMS encontrar uma tabela particionada ou uma tabela que usa herança, o seguinte comportamento é observado:
  + AWS DMS identifica e relata as tabelas principal e secundária envolvidas no particionamento ou na herança no banco de dados de origem.
  + **Criação de tabela no destino**: no banco de dados de destino, AWS DMS cria a tabela como uma tabela padrão (não particionada, não herdada), preservando a estrutura e as propriedades da (s) tabela (s) selecionada (s), mas não a lógica de particionamento ou herança.
  + **Diferenciação de registros em tabelas herdadas**: para tabelas que usam herança, AWS DMS não distingue registros pertencentes a tabelas secundárias ao preencher a tabela principal. Por isso, ele não utiliza consultas SQL com sintaxe, como `SELECT * FROM ONLY parent_table_name`.
+ Para replicar tabelas particionadas de uma origem PostgreSQL para um destino PostgreSQL, primeiro crie manualmente as tabelas pai e filho no destino. Defina uma tarefa separada a fim de replicar nessas tabelas. Nesse caso, defina a configuração da tarefa como **Truncar antes de carregar**.
+ O tipo de dados `NUMERIC` do PostgreSQL não tem um tamanho fixo. Na transferência de dados do tipo `NUMERIC` sem precisão e escala, o DMS utiliza `NUMERIC(28,6)` (uma precisão de 28 e escala 6) por padrão. Por exemplo, o valor 0,611111104488373 da origem é convertido em 0,611111 no destino do PostgreSQL.
+ AWS DMS oferece suporte ao Aurora PostgreSQL Serverless V1 como fonte somente para tarefas de carga total. AWS DMS oferece suporte ao Aurora PostgreSQL Serverless V2 como fonte para carga total, carga total e tarefas CDC e somente CDC.
+ AWS DMS não suporta a replicação de uma tabela com um índice exclusivo criado com uma função de coalescência.
+ Se a definição da chave primária na origem e no destino não corresponder, os resultados da replicação poderão ser imprevisíveis.
+ Ao utilizar o recurso Carga paralela, a segmentação de tabelas de acordo com partições ou subpartições não é compatível. Para obter mais informações sobre Carga paralela, consulte [Utilizar carga paralela para tabelas, visualizações e coleções selecionadas](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.ParallelLoad). 
+ AWS DMS não oferece suporte a restrições diferidas.
+ AWS DMS a versão 3.4.7 suporta o PostgreSQL 14.x como fonte com estas limitações:
  + AWS DMS não suporta o processamento de alterações de confirmações em duas fases.
  + AWS DMS não oferece suporte à replicação lógica para transmitir transações longas em andamento.
+ AWS DMS não oferece suporte ao CDC para Amazon RDS Proxy for PostgreSQL como fonte.
+ Ao utilizar [filtros de origem](CHAP_Tasks.CustomizingTasks.Filters.md) que não contêm uma coluna de chave primária, as operações `DELETE` não serão capturadas.
+ Se o banco de dados de origem também for um destino para outro sistema de replicação de terceiros, as alterações de DDL podem não ser migradas durante a CDC. Porque essa situação pode impedir que o acionador de eventos `awsdms_intercept_ddl` seja acionado. Para contornar a situação, modifique esse acionador no banco de dados de origem da seguinte maneira:

  ```
  alter event trigger awsdms_intercept_ddl enable always;
  ```
+ AWS DMS não suporta a replicação de alterações feitas nas definições de chave primária no banco de dados de origem. Se a estrutura da chave primária for alterada durante uma tarefa de replicação ativa, as alterações subsequentes nas tabelas afetadas não serão replicadas para o destino.
+ Na replicação de DDL como parte de um script, o número total máximo de comandos de DDL por script é 8.192 e o número total máximo de linhas por script é 8.192 linhas.
+ AWS DMS não oferece suporte a visualizações materializadas.
+ Para tarefas de carga total e CDC usando uma réplica de leitura como origem, AWS DMS não é possível criar slots de replicação em réplicas de leitura.

## Tipos de dados de origem para o PostgreSQL
<a name="CHAP_Source-PostgreSQL-DataTypes"></a>

A tabela a seguir mostra os tipos de dados de origem do PostgreSQL que são compatíveis com o AWS DMS uso e o mapeamento AWS DMS padrão para os tipos de dados.

Para obter informações sobre como visualizar o tipo de dados mapeado no destino, consulte a seção relativa ao endpoint de destino que você está usando.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  Tipos de dados do PostgreSQL  |  Tipos de dados do DMS  | 
| --- | --- | 
|  INTEGER  |  INT4  | 
|  SMALLINT  |  INT2  | 
|  BIGINT  |  INT8  | 
|  NUMERIC (p,s)  |  Se a precisão estiver entre 0 e 38, use NUMERIC. Se a precisão for maior ou igual a 39, use STRING.  | 
|  DECIMAL(P,S)  |  Se a precisão estiver entre 0 e 38, use NUMERIC. Se a precisão for maior ou igual a 39, use STRING.  | 
|  REAL  |  REAL4  | 
|  DOUBLE  |  REAL8  | 
|  SMALLSERIAL  |  INT2  | 
|  SERIAL  |  INT4  | 
|  BIGSERIAL  |  INT8  | 
|  MONEY  |  NUMERIC(38,4) O tipo de dados MONEY é mapeado para FLOAT no SQL Server.  | 
|  CHAR  |  WSTRING (1)  | 
|  CHAR(N)  |  WSTRING (n)  | 
|  VARCHAR(N)  |  WSTRING (n)  | 
|  TEXT  |  NCLOB  | 
|  CITEXT  |  NCLOB  | 
|  BYTEA  |  BLOB  | 
|  TIMESTAMP  |  DATETIME  | 
|  TIMESTAMP WITH TIME ZONE  |  DATETIME  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIME WITH TIME ZONE  |  TIME  | 
|  INTERVAL  |  STRING (128)—1 YEAR, 2 MONTHS, 3 DAYS, 4 HOURS, 5 MINUTES, 6 SECONDS  | 
|  BOOLEAN  |  CHAR (5) falso ou verdadeiro  | 
|  ENUM  |  STRING (64)  | 
|  CIDR  |  STRING (50)  | 
|  INET  |  STRING (50)  | 
|  MACADDR  |  STRING (18)  | 
|  BIT (n)  |  STRING (n)  | 
|  BIT VARYING (n)  |  STRING (n)  | 
|  UUID  |  STRING  | 
|  TSVECTOR  |  CLOB  | 
|  TSQUERY  |  CLOB  | 
|  XML  |  CLOB  | 
|  POINT  |  STRING (255) "(x,y)"  | 
|  LINE  |  STRING (255) "(x,y,z)"  | 
|  LSEG  |  STRING (255) "((x1,y1),(x2,y2))"  | 
|  BOX  |  STRING (255) "((x1,y1),(x2,y2))"  | 
|  PATH  |  CLOB "((x1,y1),(xn,yn))"  | 
|  POLYGON  |  CLOB "((x1,y1),(xn,yn))"  | 
|  CIRCLE  |  STRING (255) "(x,y),r"  | 
|  JSON  |  NCLOB  | 
|  JSONB  |  NCLOB  | 
|  ARRAY  |  NCLOB  | 
|  COMPOSITE  |  NCLOB  | 
|  HSTORE  |  NCLOB  | 
|  INT4ALCANCE  |  STRING (255)  | 
|  INT8ALCANCE  |  STRING (255)  | 
|  NUMRANGE  |  STRING (255)  | 
|  STRRANGE  |  STRING (255)  | 

### Como trabalhar com tipos de dados de origem LOB para PostgreSQL
<a name="CHAP_Source-PostgreSQL-DataTypes-LOBs"></a>

Os tamanhos de colunas do PostgreSQL afetam a conversão de tipos de dados LOB do PostgreSQL em tipos de dados do AWS DMS . Para trabalhar com isso, siga estas etapas para os seguintes tipos de dados do AWS DMS :
+ BLOB: defina **Limitar tamanho de LOB em** o valor de **Tamanho máximo de LOB (KB)** na criação da tarefa.
+ CLOB — A replicação trata cada personagem como um UTF8 personagem. Portanto, localize o tamanho do texto de caracteres mais longo na coluna, mostrado aqui como `max_num_chars_text`. Utilize esse tamanho para especificar o valor de **Limitar o tamanho do LOB em**. Se os dados incluírem caracteres de 4 bytes, multiplique por 2 para especificar o valor de ** Limitar o valor de LOB em**, que é em bytes. Nesse caso, **Limitar o tamanho de LOB para** será igual a `max_num_chars_text` multiplicado por 2.
+ NCLOB: a replicação trata cada caractere como um caractere de byte duplo. Portanto, localize o tamanho do texto de caracteres mais longo na coluna (`max_num_chars_text`) e multiplique por 2. Faça isso para especificar o valor de **Limitar o tamanho do LOB em**. Nesse caso, **Limitar o tamanho de LOB para** será igual a `max_num_chars_text` multiplicado por 2. Se os dados incluírem caracteres de 4 bytes, multiplique por 2 novamente. Nesse caso,** Limitar o tamanho de LOB para** será igual a `max_num_chars_text` multiplicado por 4.