逻辑订阅

更新时间:2025-02-14 10:03:53

RDS PostgreSQL提供逻辑订阅功能,支持在多个RDS PostgreSQL实例之间实现准实时表级单向同步,可以用于数据共享、数据汇总、数据拆分等业务场景。

功能简介

如果您在全国多个地域部署业务,可以通过逻辑订阅共享数据,例如将中心数据共享给其他地域,或者将其他地域数据汇总到中心进行实时分析查询等。

本文简单介绍逻辑订阅的使用流程,示例的流程如下:

  1. 发布端实例的数据库testdb01创建发布,发布表为public.t1。

  2. 订阅端实例的数据库testdb02创建订阅sub1_from_pub1,订阅发布端数据库的表public.t1。

更多详情请参见逻辑订阅原理与最佳实践

注意事项

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

前提条件

  • 实例为RDS PostgreSQL 10及以上版本的云盘实例。

  • 实例参数wal_level的值为logical,您可以在控制台的参数设置页面进行修改,该参数修改后需要重启实例才能生效。重启实例会造成连接中断,请提前做好业务安排,谨慎操作。

  • 如果是同一VPC内两个实例间实现逻辑订阅,需要在各自的白名单中放通实例所在VPCIP,例如放通172.16.0.0/16。

  • 需要具有rds_superuser权限的账号。例如高权限账号,或者由高权限账号使用CREATE ROLE xxx WITH SUPERUSER创建的其他账号。

操作步骤

发布端创建新发布

  1. 连接发布端PostgreSQL实例

  2. 在发布端数据库中创建新发布,命令如下:

    CREATE PUBLICATION <发布名称> FOR TABLE <表名>;

    示例

    CREATE PUBLICATION pub1 FOR TABLE public.t1;
    说明
    • 只能发布持久基表。详情请参见CREATE PUBLICATION

    • 您可以通过SELECT * FROM pg_publication;查看当前数据库有哪些发布。

订阅端创建订阅

  1. 连接订阅端PostgreSQL实例

  1. 在订阅端数据库创建新订阅。

    发布端和订阅端是同一实例中的不同数据库
    发布端和订阅端是不同实例的不同数据库
    1. 在发布端数据库中创建逻辑复制槽。

      SELECT pg_create_logical_replication_slot('<slot_name>', 'pgoutput');
    2. 在订阅端数据库中,创建与待订阅的发布端数据库表具有相同结构和名称的表。

    3. 在订阅端数据库中创建逻辑订阅。

      • RDS PostgreSQL 16及之后的版本

        CREATE SUBSCRIPTION <订阅名称>
        CONNECTION 'host=127.0.0.1 port=<内网端口> user=<具有发布权限的账号> password=<账号的密码> dbname=<发布端数据库名>'
        PUBLICATION publication_name WITH (create_slot=false,slot_name=<slot_name>);
      • RDS PostgreSQL 10~15

        CREATE SUBSCRIPTION <订阅名称>
        CONNECTION 'dbname=<发布端数据库名>'
        PUBLICATION publication_name WITH (create_slot=false,slot_name=<slot_name>);
    重要

    发布端数据库和订阅端数据库位于相同的实例时,必须使用WITH添加订阅参数create_slot=false

    1. 在订阅端数据库中,创建与待订阅的发布端数据库表具有相同结构和名称的表。

    2. 在订阅端数据库中创建逻辑订阅。

      CREATE SUBSCRIPTION <订阅名称>
      CONNECTION 'host=<发布端实例内网域名> port=<发布端实例内网端口> user=<发布端实例有发布权限的账号> password=<发布端实例账号的密码> dbname=<发布端实例数据库名>'
      PUBLICATION <发布端数据库的发布名称>;

    示例:

    CREATE SUBSCRIPTION sub1_from_pub1 
    CONNECTION 'host=pgm-2ze7n9zb0n1f****.pg.rds.aliyuncs.comm port=5432 user=testdbuser password=****x dbname=testdb01' 
    PUBLICATION pub1 WITH (enabled, create_slot, slot_name='sub1_from_pub1');  
    说明
    • 您可以通过SELECT * FROM pg_subscription;命令查看整个数据库集群有哪些订阅。

    • 发布端数据库的发布名称后可使用WITH附加相关订阅参数,详情请参见CREATE SUBSCRIPTION

  • 本页导读 (1)
  • 功能简介
  • 注意事项
  • 前提条件
  • 操作步骤
  • 发布端创建新发布
  • 订阅端创建订阅
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等