Configurar a replicação lógica para a instância de banco de dados RDS para PostgreSQL
O procedimento a seguir mostra como iniciar a replicação lógica entre duas instâncias de banco de dados RDS PostgreSQL. As etapas pressupõem que tanto a fonte (editor) quanto o destino (assinante) tenham a extensão pglogical
configurada conforme detalhado em Configurar a extensão pglogical.
Como criar o nó do editor e definir as tabelas a serem replicadas
Estas etapas pressupõem que a instância de banco de dados do RDS para PostgreSQL tenha um banco de dados com uma ou mais tabelas que você deseja replicar para outro nó. Você precisa recriar a estrutura da tabela do editor no assinante, então, primeiro, obtenha a estrutura da tabela, se necessário. Você pode fazer isso usando o metacomando psq1
\d
e criando a mesma tabela na instância do assinante. O procedimento a seguir cria uma tabela de exemplo no editor (fonte) para fins de demonstração.tablename
-
Use
psql
para se conectar à instância que tem a tabela que você deseja usar como fonte para assinantes.psql --host=
source-instance
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres
--password --dbname=labdb
Se você não tiver uma tabela, crie uma tabela de exemplo da forma a seguir.
-
Crie uma tabela de exemplo usando a declaração SQL a seguir.
CREATE TABLE docs_lab_table (a int PRIMARY KEY);
-
Preencha a tabela com dados gerados usando a instrução SQL a seguir.
INSERT INTO docs_lab_table VALUES (generate_series(1,5000));
INSERT 0 5000
-
Verifique se os dados existem na tabela usando a declaração SQL a seguir.
SELECT count(*) FROM docs_lab_table;
-
-
Identifique essa instância de banco de dados do RDS para PostgreSQL como o nó do editor da forma a seguir.
SELECT pglogical.create_node( node_name := '
docs_lab_provider
', dsn := 'host=source-instance
.aws-region
.rds.amazonaws.com port=5432 dbname=labdb
');create_node ------------- 3410995529 (1 row)
-
Adicione a tabela que você deseja replicar ao conjunto de replicação padrão. Para obter mais informações sobre conjuntos de replicação, consulte Replication sets
(Conjuntos de replicação) na documentação da pglogical. SELECT pglogical.replication_set_add_table('default', '
docs_lab_table
', 'true', NULL, NULL);replication_set_add_table --------------------------- t (1 row)
A configuração do nó do editor está concluída. Agora você pode configurar o nó de assinante para receber as atualizações do editor.
Como configurar o nó de assinante e criar uma assinatura para receber atualizações
Estas etapas pressupõem que instância de banco de dados do RDS para PostgreSQL tenha sido configurada com a extensão pglogical
. Para ter mais informações, consulte Configurar a extensão pglogical.
-
Use
psql
para se conectar à instância em que você deseja receber atualizações do editor.psql --host=
target-instance
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres
--password --dbname=labdb
-
Na instância de banco de dados RDS para PostgreSQL do assinante, crie a mesma tabela que existe no editor. Neste exemplo, a tabela é
docs_lab_table
. Você pode criar a tabela da seguinte maneira.CREATE TABLE docs_lab_table (a int PRIMARY KEY);
-
Verifique se essa tabela está vazia.
SELECT count(*) FROM docs_lab_table;
count ------- 0 (1 row)
-
Identifique essa instância de banco de dados RDS para PostgreSQL como o nó do assinante da forma a seguir.
SELECT pglogical.create_node( node_name := '
docs_lab_target
', dsn := 'host=target-instance
.aws-region
.rds.amazonaws.com port=5432 sslmode=require dbname=labdb
user=postgres
password=********
');create_node ------------- 2182738256 (1 row)
-
Crie a assinatura.
SELECT pglogical.create_subscription( subscription_name := 'docs_lab_subscription', provider_dsn := 'host=
source-instance
.aws-region
.rds.amazonaws.com port=5432 sslmode=require dbname=labdb
user=postgres
password=*******
', replication_sets := ARRAY['default'], synchronize_data := true, forward_origins := '{}' );create_subscription --------------------- 1038357190 (1 row)
Ao concluir essa etapa, os dados da tabela no editor são criados na tabela no assinante. Se você quiser verificar se isso ocorreu, verifique a consulta SQL a seguir.
SELECT count(*) FROM docs_lab_table;
count ------- 5000 (1 row)
Desse ponto em diante, as alterações feitas na tabela do editor são replicadas na tabela do assinante.