Executar replicação lógica para o Amazon RDS para PostgreSQL
A partir da versão 10.4, o RDS para PostgreSQL é compatível com a sintaxe SQL de publicação e assinatura, que foi introduzida pela primeira vez no PostgreSQL 10. Para saber mais, consulte Logical replication
nota
Além do recurso nativo de replicação lógica do PostgreSQL introduzido no PostgreSQL 10, o RDS para PostgreSQL também é compatível com a extensão pglogical
. Para ter mais informações, consulte Usar pglogical para sincronizar dados entre instâncias.
A seguir, você pode encontrar informações sobre como configurar a replicação lógica de uma instância de banco de dados do RDS para PostgreSQL.
Tópicos
Considerações sobre a replicação lógica e a decodificação lógica
O RDS para PostgreSQL oferece suporte a transmissão de alterações de Write-Ahead Log (WAL – Log de gravação antecipada) usando slots de replicação lógica. Ele também permite o uso de decodificação lógica. Você pode configurar slots de replicação lógica em sua instância e transmitir alterações no banco de dados por meio desses slots para um cliente, como pg_recvlogical
. Você cria slots de replicação lógica no nível do banco de dados. Esses slots são compatíveis com conexões de replicação para um único banco de dados.
Os clientes mais comuns para replicação lógica do PostgreSQL são o AWS Database Migration Service ou um host gerenciado personalizado em uma instância do Amazon EC2. O slot de replicação lógica não tem informações sobre o receptor do transmissão. Além disso, não é exigido que o destino seja um banco de dados de réplica. Se você configurar um slot de replicação lógica e não fizer a leitura no slot, os dados poderão ser gravados no armazenamento da instância de banco de dados e lotá-lo rapidamente.
Ative a replicação lógica do PostgreSQL e a descodificação lógica no Amazon RDS com um parâmetro, um tipo de conexão de replicação e uma função de segurança. O cliente da descodificação lógica pode ser qualquer cliente que possa estabelecer uma conexão de replicação a um banco de dados em uma instância de banco de dados PostgreSQL.
Como ativar a descodificação lógica de uma instância de banco de dados do RDS para PostgreSQL
-
Verifique se a conta de usuário que você está usando tem as seguintes funções:
-
A função
rds_superuser
para que você possa ativar a replicação lógica -
A função
rds_replication
atribui as permissões necessárias para gerenciar slots lógicos e transmitir dados usando slots lógicos.
-
-
Defina o parâmetro estático
rds.logical_replication
como 1. Como parte da aplicação desse parâmetro, defina também os parâmetroswal_level
,max_wal_senders
,max_replication_slots
emax_connections
. Essas alterações de parâmetros podem aumentar a geração de WALs. Portanto, configure o parâmetrords.logical_replication
quando estiver usando slots lógicos. -
Reinicialize a instância de banco de dados para que o parâmetro estático
rds.logical_replication
tenha efeito. -
Crie um slot de replicação lógica conforme explicado na próxima seção. Esse processo requer que você especifique um plug-in de decodificação. Atualmente, o RDS para PostgreSQL aceita os plug-ins de saída test_decoding e wal2json fornecidos com o PostgreSQL.
Para obter mais informações sobre a descodificação lógica do PostgreSQL, consulte a documentação do PostgreSQL
Como trabalhar com slots de replicação lógica
Você pode usar comandos SQL para trabalhar com slots lógicos. Por exemplo, o comando a seguir cria um slot lógico denominado test_slot
usando o plug-in de saída padrão test_decoding
do PostgreSQL.
SELECT * FROM pg_create_logical_replication_slot('test_slot', 'test_decoding');
slot_name | xlog_position -----------------+--------------- regression_slot | 0/16B1970 (1 row)
Para listar slots lógicos, use o seguinte comando.
SELECT * FROM pg_replication_slots;
Para descartar um slot lógico, use o seguinte comando.
SELECT pg_drop_replication_slot('test_slot');
pg_drop_replication_slot ----------------------- (1 row)
Para obter mais exemplos sobre como trabalhar com slots lógicos de replicação, consulte “Logical decoding examples”
Após criar um slot de replicação lógica, você pode iniciar o streaming. O exemplo a seguir mostra como a decodificação lógica é controlada sobre o protocolo de replicação de streaming. Este exemplo usa o programa pg_recvlogical, incluído na distribuição do PostgreSQL. Para fazer Isso, a autenticação do cliente deve estar configurada para permitir conexões de replicação.
pg_recvlogical -d postgres --slot test_slot -U postgres --host -
instance-name.111122223333
.aws-region
.rds.amazonaws.com -f - --start
Para ver o conteúdo da visualização pg_replication_origin_status
, consulte a função pg_show_replication_origin_status
.
SELECT * FROM pg_show_replication_origin_status();
local_id | external_id | remote_lsn | local_lsn ----------+-------------+------------+----------- (0 rows)