更新时间:2026-07-02 GMT+08:00
分享

CREATE SUBSCRIPTION

功能描述

为当前数据库添加一个新的订阅(SUBSCRIPTION)。

订阅(Subscription) 是指一个数据库实例(称为订阅者)从另一个数据库实例(称为发布者)接收数据变更的过程。订阅者通过订阅发布者的数据变更,实现数据的同步和分发。

注意事项

  • 该语法仅8.2.0.100及以上集群版本支持。
  • 只有系统管理员才可以创建订阅。
  • 新创建的订阅名称不能与当前数据库中任何现有的订阅名称相同。

语法格式

1
2
3
4
CREATE SUBSCRIPTION name
    CONNECTION 'conninfo'
    PUBLICATION publication_name [, ...]
    [ WITH ( subscription_parameter [= value] [, ... ] ) ]

参数说明

表1 CREATE SUBSCRIPTION参数说明

参数

描述

取值范围

name

新订阅的名称。

字符串,要符合标识符的命名规范。参见标识符命名规范

conninfo

连接发布端的字符串。

  • host,发布端IP地址,可以同时指定发布端主机和备机的IP地址,如果同时指定了多个IP,以英文逗号分隔。
  • port,发布端端口,此处的端口不能使用主端口,而应该使用主端口+1端口,否则会与线程池冲突。可以同时指定发布端主机和备机的端口,如果同时指定了多个端口,以英文逗号分隔。host和port的数量要一致,并且要相对应。
  • dbname,发布所在的数据库。
  • user和password

    用于连接发布端且具有系统管理员权限(SYSADMIN)或者运维管理员权限(OPRADMIN)的用户名和密码。

例如:host=1.1.1.1,2.2.2.2 port=10000,20000 dbname=postgres user=repusr1 password=password

publication_name

要订阅的发布端的发布名称,一个订阅可以对应多个发布。

已有的发布名称。

WITH ( subscription_parameter [= value] [, ... ] )

该子句指定订阅的可选参数。

  • enabled,指定订阅是否应该主动复制,或者只是先被创建而不立即运行。

    取值范围:true,false。

    默认值:true

  • create_slot,指定该命令是否要在发布者端创建复制槽。

    取值范围:true,false。

    默认值:true

  • slot_name,指定要在发布者端使用的复制槽名称。

    取值范围:字符串。

    默认值:默认使用订阅名称作为复制槽的名称。

-

示例

数据库发布的示例数据请参考示例

  • 创建订阅,订阅上游数据库的发布。
    CREATE SUBSCRIPTION sub_demo
        CONNECTION 'host=10.***.*.** port=10000 user=u_admin dbname=testdb password=********'
        PUBLICATION pub_sales_only;
  • 订阅多个发布。
    CREATE SUBSCRIPTION sub_demo_1
        CONNECTION 'host=10.***.*.** port=10000 user=u_admin dbname=testdb password=********'
        PUBLICATION pub_sales_only,pub_sales_all_ops;
  • 订阅所有表(需上游发布包含ALL TABLES IN SCHEMA)。
    CREATE SUBSCRIPTION sub_demo_1
        CONNECTION 'host=10.***.*.** port=10000 user=u_admin dbname=testdb password=********'
        PUBLICATION pub_all_tables;

相关文档