【RDS PostgreSQL】逻辑订阅

示例的流程如下:

源实例的数据库src创建发布,发布表public.t1,然后在目的实例的数据库dst创建订阅sub1_from_pub1,订阅源库表public.t1。


注意事项

您可以在单个实例的两个表之间实现逻辑订阅,也可以在同一VPC内的两个实例间(必须使用内网地址)实现逻辑订阅。


前提条件

  • 实例版本如下:
    • PostgreSQL 12(云盘)
    • PostgreSQL 11(云盘)
    • PostgreSQL 10(云盘)
  • 实例参数wal_level的值为logical,您可以在控制台的参数设置页面进行修改,该参数修改后需要重启实例才能生效。重启实例会造成连接中断,请提前做好业务安排,谨慎操作。
  • 如果是同一VPC内两个实例间实现逻辑订阅,需要在各自的白名单中放通实例所在VPC的IP段,例如放通172.16.0.0/16。
  • 需要具有rds_superuser权限的账号,例如高权限账号或者高权限账号使用create role xxx with superuesr创建的其他账号。


操作步骤

源库创建新发布

  1. 连接PostgreSQL源实例
  2. 在源库里创建新发布,命令如下:
CREATE PUBLICATION <发布名称> FOR TABLE <表名>;

示例

create publication pub1 for table public.t1;


说明

    • 只能发布持久基表。详情请参见CREATE PUBLICATION
    • 您可以通过select * frompg_publication;查看当前数据库有哪些发布。


目的库创建订阅

  1. 连接PostgreSQL目的实例
  2. 此步骤以源库和目的库在相同的实例为例,如果是两个实例间实现逻辑订阅,请跳转至步骤3。执行如下命令:
select * from pg_create_logical_replication_slot('<订阅名称>','pgoutput');


  1. 在目的库创建新订阅,命令如下:
CREATE SUBSCRIPTION <订阅名称>
    CONNECTION '<源库的实例连接信息>'
    PUBLICATION <源库的发布名称>;

示例

create subscription sub1_from_pub1 
connection 'host=pgm-xxxxx.pgsql.singapore.rds.aliyuncs.com port=3433 user=test password=xxxxx dbname=src' 
publication pub1 with (enabled, create_slot, slot_name='sub1_from_pub1');


说明

    • 源库的实例连接信息格式为:host=<源实例内网域名> port=<源实例内网端口> user=<源实例有发布权限账号> password=<源实例账号的密码> dbname=<源实例数据库名>
    • 如果源库和目的库在相同的实例,需要设置host=localhostcreate_slot=false,port可以使用show port查询,通常为3002。
    • 您可以通过select * from pg_subscription;查看整个数据库集群有哪些订阅。
    • 源库的发布名称后可以使用with附加相关订阅参数,详情请参见CREATE SUBSCRIPTION
上一篇:DAY 2 ||ECS快速搭建Docker环境


下一篇:【OSS】支付宝小程序直传OSS实践