ALTER SUBSCRIPTION — 更改订阅的定义
ALTER SUBSCRIPTIONnameCONNECTION 'conninfo' ALTER SUBSCRIPTIONnameSET PUBLICATIONpublication_name[, ...] [ WITH (publication_option[=value] [, ... ] ) ] ALTER SUBSCRIPTIONnameADD PUBLICATIONpublication_name[, ...] [ WITH (publication_option[=value] [, ... ] ) ] ALTER SUBSCRIPTIONnameDROP PUBLICATIONpublication_name[, ...] [ WITH (publication_option[=value] [, ... ] ) ] ALTER SUBSCRIPTIONnameREFRESH PUBLICATION [ WITH (refresh_option[=value] [, ... ] ) ] ALTER SUBSCRIPTIONnameENABLE ALTER SUBSCRIPTIONnameDISABLE ALTER SUBSCRIPTIONnameSET (subscription_parameter[=value] [, ... ] ) ALTER SUBSCRIPTIONnameSKIP (skip_option=value) ALTER SUBSCRIPTIONnameOWNER TO {new_owner| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER SUBSCRIPTIONnameRENAME TOnew_name
ALTER SUBSCRIPTION 可以更改在 CREATE SUBSCRIPTION 中指定的大部分订阅属性。
您必须拥有该订阅才能使用 ALTER SUBSCRIPTION。要重命名订阅或更改所有者,您必须对数据库具有 CREATE 权限。此外,要更改所有者,您必须能够 SET ROLE 到新的所有者角色。如果订阅具有 password_required=false,则只有超级用户才能修改它。
当刷新发布时,我们会删除不再属于该发布的关联关系,并且如果存在任何表同步槽,我们也会删除它们。需要删除这些槽,以便释放远程主机上为订阅分配的资源。如果由于网络故障或其他错误,PostgreSQL 无法删除这些槽,则会报告错误。要继续进行此操作,用户需要重试该操作,或者像在 DROP SUBSCRIPTION 中解释的那样,将槽与订阅分离并删除订阅。
命令 ALTER SUBSCRIPTION ... REFRESH PUBLICATION、ALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ... 且 refresh 选项为 true 以及 ALTER SUBSCRIPTION ... SET (failover = true|false) 不能在事务块内执行。
当订阅启用了 two_phase 提交时,命令 ALTER SUBSCRIPTION ... REFRESH PUBLICATION 和 ALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ... 且 refresh 选项为 true 也不能执行,除非 copy_data 为 false。请参见 pg_subscription 的 subtwophasestate 列以了解实际的两阶段状态。
name #要更改其属性的订阅的名称。
CONNECTION 'conninfo' #此子句替换最初由 CREATE SUBSCRIPTION 设置的连接字符串。有关详细信息,请参见此处。
SET PUBLICATION publication_nameADD PUBLICATION publication_nameDROP PUBLICATION publication_name #这些形式更改已订阅的发布列表。SET 将整个发布列表替换为一个新列表,ADD 将其他发布添加到发布列表,而 DROP 从发布列表中删除发布。我们允许在 ADD 和 SET 变体中指定不存在的发布,以便用户稍后可以添加这些发布。有关详细信息,请参见 CREATE SUBSCRIPTION。默认情况下,此命令的行为也类似于 REFRESH PUBLICATION。
publication_option 指定此操作的其他选项。支持的选项包括
refresh (boolean)当为 false 时,该命令不会尝试刷新表信息。然后应该单独执行 REFRESH PUBLICATION。默认值为 true。
此外,可以指定在 REFRESH PUBLICATION 下描述的选项,以控制隐式刷新操作。
REFRESH PUBLICATION #从发布者获取缺少的表信息。这将开始复制自 CREATE SUBSCRIPTION 或上次调用 REFRESH PUBLICATION 以来添加到已订阅的发布中的表。
refresh_option 指定刷新操作的其他选项。支持的选项包括
ENABLE #启用先前禁用的订阅,在事务结束时启动逻辑复制工作进程。
DISABLE #禁用正在运行的订阅,在事务结束时停止逻辑复制工作进程。
SET ( subscription_parameter [= value] [, ... ] ) #此子句更改最初由 CREATE SUBSCRIPTION 设置的参数。有关详细信息,请参见此处。可以更改的参数为 slot_name、synchronous_commit、binary、streaming、disable_on_error、password_required、run_as_owner、origin 和 failover。只有超级用户才能设置 password_required = false。
当更改 slot_name 时,命名槽的 failover 和 two_phase 属性值可能与订阅中指定的对应项 failover 和 two_phase 参数不同。创建槽时,请确保槽属性 failover 和 two_phase 与订阅的对应参数匹配。否则,发布者上的槽的行为可能与这些订阅选项所说的不同:例如,即使订阅的 failover 选项被禁用,发布者上的槽也可能同步到备用服务器,或者即使订阅的 failover 选项被启用,也可能禁用同步。
SKIP ( skip_option = value ) #跳过应用远程事务的所有更改。如果传入数据违反任何约束,逻辑复制将停止,直到问题解决。通过使用 ALTER SUBSCRIPTION ... SKIP 命令,逻辑复制工作进程会跳过事务中的所有数据修改更改。此选项对已通过在订阅者上启用 two_phase 而准备好的事务没有影响。在逻辑复制工作进程成功跳过事务或完成事务后,LSN(存储在 pg_subscription.subskiplsn 中)会被清除。有关逻辑复制冲突的详细信息,请参见 第 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 SUBSCRIPTION 是 PostgreSQL 扩展。
如果您在文档中发现任何不正确、与您使用特定功能的体验不符或需要进一步澄清的地方,请使用此表单报告文档问题。