为 Aurora PostgreSQL 数据库集群设置逻辑复制
以下过程说明如何在两个 Aurora PostgreSQL 数据库集群之间启动逻辑复制。这些步骤假设来源(发布者)和目标(订阅者)都如设置 pglogical 扩展中所述设置了 pglogical 扩展。
注意
订阅用户节点的 node_name 不能以 rds 开头。
创建发布者节点并定义要复制的表
这些步骤假设您的 Aurora PostgreSQL 数据库集群有一个写入器实例以及一个数据库,其中包含一个或多个您要复制到另一个节点的表。您需要在订阅者上根据发布者重新创建表结构,因此,如果需要,首先获取表结构。为此,您可以使用 psql 元命令 \d ,然后在订阅者实例上创建相同的表。以下过程在发布者(来源)上创建示例表以用于演示目的。tablename
- 
        使用 psql连接到具有要用作订阅者来源的表的实例。psql --host=source-instance.aws-region.rds.amazonaws.com --port=5432 --username=postgres--password --dbname=labdb如果没有现有表要复制,可以按如下方式创建示例表。 - 
            使用以下 SQL 语句创建一个示例表。 CREATE TABLE docs_lab_table (a int PRIMARY KEY);
- 
            使用以下 SQL 语句用生成的数据填充表。 INSERT INTO docs_lab_table VALUES (generate_series(1,5000));INSERT 0 5000
- 
            使用以下 SQL 语句验证表中是否存在数据。 SELECT count(*) FROM docs_lab_table;
 
- 
            
- 
        将这一 Aurora PostgreSQL 数据库集群标识为发布者节点,如下所示。 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)
- 
        将要复制的表添加到默认的复制集。有关复制集的更多信息,请参阅 pglogical 文档中的复制集 。 SELECT pglogical.replication_set_add_table('default', 'docs_lab_table', 'true', NULL, NULL);replication_set_add_table --------------------------- t (1 row)
发布者节点设置已完成。现在,您可以设置订阅者节点以接收来自发布者的更新。
设置订阅者节点并创建订阅以接收更新
这些步骤假设已使用 pglogical 扩展设置了 Aurora PostgreSQL 数据库集群。有关更多信息,请参阅 设置 pglogical 扩展。
- 
        使用 psql连接到要从发布者接收更新的实例。psql --host=target-instance.aws-region.rds.amazonaws.com --port=5432 --username=postgres--password --dbname=labdb
- 
        在订阅者 Aurora PostgreSQL 数据库集群上,创建与发布者上存在的相同表。在本例中,该表为 docs_lab_table。您可以按如下所示创建表。CREATE TABLE docs_lab_table (a int PRIMARY KEY);
- 
        验证此表为空。 SELECT count(*) FROM docs_lab_table;count ------- 0 (1 row)
- 
        将这一 Aurora PostgreSQL 数据库集群标识为订阅者节点,如下所示。 SELECT pglogical.create_node( node_name := 'docs_lab_target', dsn := 'host=target-instance.aws-region.rds.amazonaws.com port=5432 sslmode=require dbname=labdbuser=postgrespassword=********');create_node ------------- 2182738256 (1 row)
- 
        创建订阅。 SELECT pglogical.create_subscription( subscription_name := 'docs_lab_subscription', provider_dsn := 'host=source-instance.aws-region.rds.amazonaws.com port=5432 sslmode=require dbname=labdbuser=postgrespassword=*******', replication_sets := ARRAY['default'], synchronize_data := true, forward_origins := '{}' );create_subscription --------------------- 1038357190 (1 row)完成此步骤后,将在订阅者上的表中创建发布者上表中的数据。您可以使用以下 SQL 查询来验证是否已发生这种情况。 SELECT count(*) FROM docs_lab_table;count ------- 5000 (1 row)
此后,对发布者上的表所做的更改将复制到订阅者上的表中。