VastbaseE100

基于开源技术的HTAP数据库管理系统。性能优异,稳定可靠,提供诸多专属领域特性。

Menu

CREATE SUBSCRIPTION

CREATE SUBSCRIPTION - 定义新订阅

语法格式

CREATE SUBSCRIPTION subscription_name
    CONNECTION 'conninfo'
    PUBLICATION publication_name [, ...]
    [ WITH ( subscription_parameter [= value] [, ... ] ) ]

说明

CREATE SUBSCRIPTION为当前数据库添加了新订阅。订阅名称必须与数据库中任何现有订阅的名称不同。

订阅表示与发布者的复制连接。因此,此命令不仅在本地目录中添加定义,还在发布者上创建复制槽。

在运行此命令的事务的提交中,将启动逻辑复制工作程序以复制新订阅的数据。

参数说明

  • subscription_name

    新订阅的名称。

  • CONNECTION 'conninfo'

    连接发布者的字符串。详细信息请见第 34.1.1 节。

  • PUBLICATION publication_name

    要订阅的发布者上的发布名称。

  • WITH ( subscription_parameter [= value] [, … ] )

    该子句指定订阅的可选参数。支持的参数有:

  • copy_data (boolean)

    指定在复制启动后是否应复制正在订阅的发布中的现有数据。 默认值是true。

  • create_slot (boolean)

    指定该命令是否要在发布者上创建复制槽。默认值是true。

  • enabled (boolean)

    指定订阅是否应该主动复制,或者是否应该只是设置,但尚未启动。 默认值是true。

  • slot_name (string)

    要使用的复制插槽的名称。默认行为是使用订阅名称作为插槽的名称。 当slot_name设置为NONE时, 将不会有复制槽与订阅关联。这在需要稍后手动设置复制槽的情况下会使用。 这样的订阅必须同时enabled并且 create_slot设置为false。

  • synchronous_commit (enum)

    该参数的值会覆盖synchronous_commit设置。 默认值是off。 对于逻辑复制使用off是安全的: 如果订阅者由于缺少同步而丢失事务,数据将从发布者重新发送。 进行同步逻辑复制时,不同的设置可能是合适的。 逻辑复制工作者向发布者报告写入和刷新的位置,当使用同步复制时, 发布者将等待实际刷新。这意味着,当订阅用于同步复制时, 将订阅者的synchronous_commit设置为off 可能会增加发布服务器上COMMIT的延迟。 在这种情况下,将synchronous_commit设置为 local或更高是有利的。

  • connect (boolean)

    指定CREATE SUBSCRIPTION是否应该连接到发布者。 将其设置为false将会改变默认值enabled、 create_slot和copy_data为false。 不允许将connect设置为false的同时将 enabled、create_slot或copy_data 设置为true。 因为该选项设置为false时不会建立连接, 因此表没有被订阅,所以当启用订阅后,不会复制任何内容。 需要运行ALTER SUBSCRIPTION … REFRESH PUBLICATION才能订阅表。

注意事项

创建复制槽(默认行为)时,无法在事务块内执行 CREATE SUBSCRIPTION 。

创建连接到同一数据库集群的预订(例如,在同一集群中的数据库之间进行复制或在同一数据库中进行复制)只有在复制槽未作为同一命令的一部分创建时才会成功。否则,CREATE SUBSCRIPTION 呼叫将挂起。要使其工作,请单独创建复制插槽(使用函数pg_create_logical_replication_slot ,插件名称为 pgoutput),并使用参数说明create_slot = false创建订阅。这是一个可能在将来的版本中解除的实现限制。

示例

创建对复制出版物 mypublication 和 insert_only中的表的远程服务器的订阅,并在提交时立即开始复制:

CREATE SUBSCRIPTION mysub
         CONNECTION 'host=192.168.1.50 port=5432 user=foo dbname=foodb'
        PUBLICATION mypublication, insert_only;

创建对复制 insert_only发布中的表的远程服务器的预订,并且在以后启用之前不会开始复制。

CREATE SUBSCRIPTION mysub
         CONNECTION 'host=192.168.1.50 port=5432 user=foo dbname=foodb'
        PUBLICATION insert_only
               WITH (enabled = false);