Configurar a replicação lógica para a instância de banco de dados RDS para PostgreSQL - Amazon Relational Database Service

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

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

    1. Crie uma tabela de exemplo usando a declaração SQL a seguir.

      CREATE TABLE docs_lab_table (a int PRIMARY KEY);
    2. 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
    3. Verifique se os dados existem na tabela usando a declaração SQL a seguir.

      SELECT count(*) FROM docs_lab_table;
  2. 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)
  3. 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.

  1. 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
  2. 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);
  3. Verifique se essa tabela está vazia.

    SELECT count(*) FROM docs_lab_table; count ------- 0 (1 row)
  4. 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)
  5. 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.