Decodificação lógica em uma réplica de leitura
O RDS para PostgreSQL comporta a replicação lógica em espera com o PostgreSQL 16.1. Isso permite criar uma decodificação lógica a partir de um modo de espera somente leitura que reduza a carga na instância de banco de dados primária. É possível ter maior disponibilidade para as aplicações que precisam sincronizar dados em vários sistemas. Esse recurso melhora a performance do data warehouse e da análise de dados.
Além disso, os slots de replicação em um modo de espera específico mantêm a promoção desse modo de espera para um primário. Isso significa que, no caso de um failover de uma instância de banco de dados primária ou da promoção de uma instância de espera para a nova primária, os slots de replicação serão mantidos e os antigos assinantes em espera não serão afetados.
Como criar a decodificação lógica em uma réplica de leitura
-
Ativar a replicação lógica: para criar a decodificação lógica em espera, é necessário ativar a replicação lógica na instância de banco de dados de origem e na réplica física. Para obter mais informações, consulte Configuração de réplica de leitura com o PostgreSQL.
-
Para ativar a replicação lógica para uma instância de banco de dados do RDS para PostgreSQL recém-criada, crie um grupo de parâmetros de banco de dados personalizado e defina o parâmetro estático
rds.logical_replicationcomo1. Depois, associe esse grupo de parâmetros de banco de dados à instância de banco de dados de origem e à réplica de leitura física. Para obter mais informações, consulte Associar um grupo de parâmetros de banco de dados a uma instância de banco de dados no Amazon RDS. -
Para ativar a replicação lógica para uma instância de banco de dados do RDS para PostgreSQL existente: modifique o grupo de parâmetros personalizado do banco de dados da instância de banco de dados de origem e à réplica de leitura física para definir o parâmetro estático
rds.logical_replicationcomo1. Para obter mais informações, consulte Modificar parâmetros em um grupo de parâmetros de banco de dados no Amazon RDS.
nota
É necessário reinicializar a instância de banco de dados para aplicar essas alterações de parâmetros.
É possível usar a consulta a seguir para verificar os valores para
wal_levelerds.logical_replicationna instância de banco de dados de origem e na réplica de leitura física.Postgres=>SELECT name,setting FROM pg_settings WHERE name IN ('wal_level','rds.logical_replication');name | setting -------------------------+--------- rds.logical_replication | on wal_level | logical (2 rows) -
-
Criar uma tabela no banco de dados de origem: conecte-se ao banco de dados na instância de banco de dados de origem. Para obter mais informações, consulte Conectar a uma instância de banco de dados executando o mecanismo de banco de dados do PostgreSQL.
Use as seguintes consultas para criar uma tabela no banco de dados de origem e inserir valores:
Postgres=>CREATE TABLE LR_test (a int PRIMARY KEY);CREATE TABLEPostgres=>INSERT INTO LR_test VALUES (generate_series(1,10000));INSERT 0 10000 -
Criar uma publicação para a tabela de origem: use a consulta a seguir para criar uma publicação para a tabela na instância de banco de dados de origem.
Postgres=>CREATE PUBLICATION testpub FOR TABLE LR_test;CREATE PUBLICATIONUse uma consulta SELECT para verificar os detalhes da publicação que foi criada na instância de banco de dados de origem e na instância de réplica de leitura física.
Postgres=>SELECT * from pg_publication;oid | pubname | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate | pubviaroot -------+---------+----------+--------------+-----------+-----------+-----------+-------------+------------ 16429 | testpub | 16413 | f | t | t | t | t | f (1 row) -
Criar uma assinatura a partir da instância de réplica lógica: crie outra instância de banco de dados do RDS para PostgreSQL como a instância de réplica lógica. Verifique se a VPC está configurada corretamente para garantir que essa instância de réplica lógica possa acessar a instância de réplica de leitura física. Para obter mais informações, consulte Amazon VPC e Amazon RDS. Se a instância de banco de dados de origem estiver ociosa, poderão ocorrer problemas de conectividade e a primária não enviará os dados para o modo de espera.
Postgres=>CREATE SUBSCRIPTION testsub CONNECTION 'host=Physical replica host nameport=portdbname=source_db_nameuser=userpassword=password' PUBLICATIONtestpub;NOTICE: created replication slot "testsub" on publisher CREATE SUBSCRIPTIONPostgres=>CREATE TABLE LR_test (a int PRIMARY KEY);CREATE TABLEUse uma consulta SELECT para verificar os detalhes da assinatura na instância de réplica lógica.
Postgres=>SELECT oid,subname,subenabled,subslotname,subpublications FROM pg_subscription;oid | subname | subenabled | subslotname | subpublications -------+---------+------------+-------------+----------------- 16429 | testsub | t | testsub | {testpub} (1 row) postgres=> select count(*) from LR_test; count ------- 10000 (1 row) -
Inspecionar o estado do slot de replicação lógica: somente é possível ver o slot de replicação física na instância de banco de dados de origem.
Postgres=>select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots;slot_name | slot_type | confirmed_flush_lsn ---------------------------------------------+-----------+--------------------- rds_us_west_2_db_dhqfsmo5wbbjqrn3m6b6ivdhu4 | physical | (1 row)No entanto, na instância de réplica de leitura, é possível ver o slot de replicação lógica e o valor
confirmed_flush_lsnmuda à medida que a aplicação consome ativamente as alterações lógicas.Postgres=>select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots;slot_name | slot_type | confirmed_flush_lsn -----------+-----------+--------------------- testsub | logical | 0/500002F0 (1 row)Postgres=>select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots;slot_name | slot_type | confirmed_flush_lsn -----------+-----------+--------------------- testsub | logical | 0/5413F5C0 (1 row)