Redrock Postgres 搜索 英文
版本: 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

ALTER SUBSCRIPTION

ALTER SUBSCRIPTION — 更改订阅的定义

语法

ALTER SUBSCRIPTION name CONNECTION 'conninfo'
ALTER SUBSCRIPTION name SET PUBLICATION publication_name [, ...] [ WITH ( publication_option [= value] [, ... ] ) ]
ALTER SUBSCRIPTION name ADD PUBLICATION publication_name [, ...] [ WITH ( publication_option [= value] [, ... ] ) ]
ALTER SUBSCRIPTION name DROP PUBLICATION publication_name [, ...] [ WITH ( publication_option [= value] [, ... ] ) ]
ALTER SUBSCRIPTION name REFRESH PUBLICATION [ WITH ( refresh_option [= value] [, ... ] ) ]
ALTER SUBSCRIPTION name ENABLE
ALTER SUBSCRIPTION name DISABLE
ALTER SUBSCRIPTION name SET ( subscription_parameter [= value] [, ... ] )
ALTER SUBSCRIPTION name SKIP ( skip_option = value )
ALTER SUBSCRIPTION name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER SUBSCRIPTION name RENAME TO new_name

描述

ALTER SUBSCRIPTION 可更改 CREATE SUBSCRIPTION 中可指定的大多数订阅属性。

您必须拥有该订阅才能使用 ALTER SUBSCRIPTION。要重命名订阅或更改所有者,您必须对该数据库拥有 CREATE 权限。此外,要更改所有者,您必须能够将 SET ROLE 设为新的所有者角色。如果订阅具有 password_required=false,则只有超级用户可以修改该订阅。

在刷新发布时,我们会移除不再是发布一部分的关系,而且如果存在,还会移除表同步槽。移除这些槽位非常有必要,这样才能释放远程主机上为订阅分配的资源。如果由于网络故障或其他错误,PostgreSQL 无法移除槽位,则会报告错误。为在这种情况下继续操作,用户要么需要重试操作,要么按照 DROP SUBSCRIPTION 中解释的那样取消将槽位与订阅的关联并删除订阅。

命令 ALTER SUBSCRIPTION ... REFRESH PUBLICATIONALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ...refresh 选项为 true 以及 ALTER SUBSCRIPTION ... SET (failover = true|false) 无法在事务块中执行。

命令 ALTER SUBSCRIPTION ... REFRESH PUBLICATIONALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ... 以及 refresh 选项为 true 也无法在订阅已启用 two_phase 提交的情况下执行,除非 copy_datafalse。请参阅 pg_subscription 的列 subtwophasestate 了解实际的两阶段状态。

参数

名称 #

需要更改其属性的订阅的名称。

CONNECTION 'conninfo' #

此子句会替换最初由 CREATE SUBSCRIPTION 设置的连接字符串。有关更多信息,请参阅此处。

SET PUBLICATION publication_name
ADD PUBLICATION publication_name
DROP PUBLICATION publication_name #

这些表单改变已订阅的发布的列表。SET 会替换已订阅的发布的新列表中的整个列表,ADD 会将额外的已订阅的发布新列表中的发布添加到发布列表中,而 DROP 会从发布列表中移除已订阅的发布。我们允许在 ADDSET 变量中指定不存在的发布,以便用户稍后添加它们。有关更多信息,请参阅 CREATE SUBSCRIPTION。默认情况下,此命令还将像 REFRESH PUBLICATION 一样作用。

publication_option 为此操作指定其他选项。支持的选项为:

refresh (boolean)

如果为假,该命令将不会尝试刷新表信息。然后应单独执行 REFRESH PUBLICATION。默认值为 true

此外,还可以在 REFRESH PUBLICATION 下描述的选项来控制隐式刷新操作。

REFRESH PUBLICATION #

从发布者获取丢失的表信息。这将启动自 CREATE SUBSCRIPTION 或上次调用 REFRESH PUBLICATION 以来已添加到已订阅版本中的表的复制。

refresh_option 为刷新操作指定其他选项。支持的选项为:

copy_data (boolean)

指定在复制启动时是否复制已订阅的已存在的版本中的数据。默认值为 true

以前订阅的表不会被复制,即使表的行过滤器 WHERE 子句随后已被修改。

有关 copy_data = true 如何与 origin 参数交互的详细信息,请参见 注释

有关以二进制格式复制现有数据的详细信息,请参阅 CREATE SUBSCRIPTIONbinary 参数。

ENABLE #

启用先前禁用的订阅,并在事务结束时启动逻辑复制工作线程。

禁用 #

禁用正在运行的订阅,在事务结束时停止逻辑复制工作程序。

设置 ( 订阅参数 [= ] [, ... ] ) #

该条款修改最初由 创建订阅 设置的参数。更多信息,请参阅该文件。可以修改的参数有 插槽名称同步提交二进制出错时禁用需要密码以所有者身份运行原点故障转移。只有超级用户可以设置 需要密码 = false

在修改 插槽名称 时,所命名插槽的 故障转移两阶段 属性值可能与订阅中指定的对应 故障转移两阶段 参数不同。在创建插槽时,确保插槽属性 故障转移两阶段 与订阅的对应参数匹配。否则,发布程序上的插槽的行为可能与这些订阅选项所说的不同:例如,发布程序上的插槽甚至在订阅的 故障转移 选项被禁用时也可以同步到备用程序,或者甚至在订阅的 故障转移 选项被启用时也可以禁用同步。

跳过 ( 跳过选项 = ) #

跳过应用远程事务的所有更改。如果传入的数据违背任何约束,逻辑复制将停止,直到问题解决。通过使用 ALTER SUBSCRIPTION ... SKIP 命令,逻辑复制进程将跳过事务中所有数据修改的更改。对于通过在订阅服务器上启用 two_phase 已准备完毕的事务,此选项没有效果。在逻辑复制进程成功跳过事务或完成事务后,pg_subscription.subskiplsn 中存储的 LSN 会被清除。有关逻辑复制冲突的详情,请参见 第 29.6 节

skip_option 指定此操作的选项。支持的选项是

lsn (pg_lsn)

指定远程事务的完成 LSN,逻辑复制进程将跳过该事务的更改。完成 LSN 是事务已提交或已准备就绪的 LSN。不支持跳过单个子事务。将 NONE 设置为重置 LSN。

new_owner #

此订阅的新所有者的用户名。

new_name #

新订阅名称。

在指定类型为 boolean 的参数时,可以省略 = value 部分,这等同于指定 TRUE

示例

将订阅的发布内容更改为 insert_only

ALTER SUBSCRIPTION mysub SET PUBLICATION insert_only;

禁用(停止)订阅

ALTER SUBSCRIPTION mysub DISABLE;

兼容性

ALTER SUBSCRIPTIONPostgreSQL 扩展。

另请参见

CREATE SUBSCRIPTIONDROP SUBSCRIPTIONCREATE PUBLICATIONALTER PUBLICATION