Configurar a replicação lógica para o cluster de banco de dados Aurora PostgreSQL
O procedimento a seguir mostra como iniciar a replicação lógica entre dois clusters de banco de dados Aurora 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 o cluster de banco de dados do Aurora PostgreSQL tenha uma instância de gravador com 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 esse cluster de banco de dados do Aurora 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 o cluster de banco de dados do Aurora PostgreSQL tenha sido configurado 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
-
No cluster de banco de dados do Aurora 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 esse cluster de banco de dados Aurora 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.