

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á.

# Replicação lógica
<a name="logical-replication-considerations"></a>

A replicação lógica é um método de replicação de objetos de dados e suas alterações com base na identidade de replicação dos objetos e suas alterações. A replicação lógica usa um modelo de *publicação* e *assinatura* em que um ou mais assinantes assinam uma ou mais publicações em um nó do publicador. Os assinantes obtêm os dados das publicações que assinam.

A replicação lógica oferece controle refinado sobre a replicação e a segurança dos dados. Você pode usar a replicação lógica nos seguintes casos de uso:
+ Replicação entre diferentes versões principais do PostgreSQL
+ Replicação entre instâncias do PostgreSQL em plataformas diferentes (por exemplo, Linux para Windows)

## Arquitetura
<a name="architecture-logical-replication"></a>

As etapas do fluxo de trabalho abaixo mostram como uma arquitetura de replicação lógica funciona:

1. Você obtém um snapshot dos dados no banco de dados do publicador e copia esses dados para o banco de dados do assinante.

1. As alterações nos bancos de dados do publicador são enviadas ao assinante em tempo real.

1. O assinante aplica os dados na mesma ordem do publicador para que a consistência transacional seja garantida para publicações em uma única assinatura.

Uma *publicação* pode ser definida em uma instância primária (publicador). Uma publicação é um conjunto de alterações geradas em uma tabela ou em um grupo de tabelas. Você pode escolher as alterações de uma combinação de operações INSERT, UPDATE, DELETE e TRUNCATE. Por padrão, todas essas alterações são replicadas para o banco de dados do assinante. Isso contrasta com a replicação física, em que endereços de bloco exatos são usados para uma replicação byte por byte.

Uma tabela publicada deve ter uma [REPLICA IDENTITY](https://www.postgresql.org/docs/current/sql-altertable.html#SQL-ALTERTABLE-REPLICA-IDENTITY) configurada para replicar as operações UPDATE e DELETE para que as linhas apropriadas a serem atualizadas ou excluídas possam ser identificadas no lado do assinante. Na maioria dos casos, a identidade da réplica é determinada por uma chave primária ou por uma chave exclusiva. Se uma chave primária não estiver presente e você não puder criar uma, defina a identidade da réplica como `full`. Isso significa que a linha inteira passa a ser a chave. Recomendamos que você defina a identidade da réplica como `full` como último recurso, pois essa configuração é ineficiente.

Uma *assinatura* é o lado downstream da replicação lógica. O nó em que uma assinatura é definida é chamado de *assinante*. Uma assinatura define a conexão com outro banco de dados e o conjunto de publicações (uma ou mais) às quais ela deseja se inscrever.

## Definições de configuração
<a name="config-settings"></a>

As seguintes configurações são necessárias para as configurações do publicador:
+ Definir `wal_level` como `logical`.
+ Defina `max_replication_slots` para acomodar pelo menos o número de assinaturas que se espera que se conectem e alguns slots de reserva para sincronização de tabelas.
+ Configure `max_wal_senders` para acomodar `max_replication_slots` e seu número de réplicas físicas.

As seguintes configurações são necessárias para as configurações do assinante:
+ Defina `max_replication_slots` para acomodar o menor número de assinaturas que você planeja adicionar ao assinante e algumas assinaturas de reserva para a sincronização de tabelas.
+ Defina `max_logical_replication_workers` para acomodar pelo menos o número de assinaturas e alguns operadores de reserva para a sincronização da tabela.
+ Defina `max_worker_processes` como pelo menos (`max_logical_replication_workers` \+ `1`).

Cada assinatura recebe alterações por meio de um slot de replicação.

As etapas a seguir mostram como realizar a replicação lógica:

1. Crie um publicador usando o comando [CREATE PUBLICATION](https://www.postgresql.org/docs/10/sql-createpublication.html) para um grupo de tabelas (que farão parte da replicação) no banco de dados de origem.

1. Crie um assinante usando o comando [CREATE SUBSCRIPTION](https://www.postgresql.org/docs/10/sql-createsubscription.html) e forneça os detalhes da publicação ao criar o assinante.

1. O carregamento de dados inicial começa automaticamente do banco de dados de origem ao banco de dados de destino.

1. Os dados de alteração capturados pelos slots de replicação são replicados no banco de dados de destino.

1. Use [pg\_stat\_replication](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-REPLICATION-VIEW) (uma tabela de catálogo) para verificar o status da replicação. Use [pg\_stat\_replication\_slots](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-REPLICATION-SLOTS-VIEW) para verificar o slot de replicação.

Para obter mais informações, consulte a publicação [Using logical replication to replicate managed Amazon RDS for PostgreSQL and Amazon Aurora to self-managed PostgreSQL](https://aws.amazon.com/blogs/database/using-logical-replication-to-replicate-managed-amazon-rds-for-postgresql-and-amazon-aurora-to-self-managed-postgresql/) no blog AWS Database.

## Limitações
<a name="limitations-logical-replication"></a>

Recomendamos considerar as seguintes limitações do método de replicação lógica antes de iniciar a migração:
+ Atualmente, a replicação lógica tem a maioria das restrições e lacunas de funcionalidade.
+ A replicação lógica não pode replicar a linguagem de definição de dados (DDL), a sequência e as operações de objetos grandes. Uma ação truncada (que se aplica a uma tabela com uma chave estrangeira) deve incluir tabelas relacionadas na mesma assinatura.

Para obter mais informações sobre as limitações de replicação lógica, consulte [31.6. Restrictions](https://www.postgresql.org/docs/current/logical-replication-restrictions.html) na documentação do PostgreSQL.