2024 年 9 月 26 日:PostgreSQL 17 发布!
支持版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本:11 / 10

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 选项为 trueALTER SUBSCRIPTION ... SET (failover = true|false) 不能在事务块内执行。

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

参数

name #

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

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)

如果为 false,则命令不会尝试刷新表信息。然后应该单独执行 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 #

启用以前禁用的订阅,在事务结束时启动逻辑复制工作器。

DISABLE #

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

SET ( subscription_parameter [= value] [, ... ] ) #

此子句更改最初由 CREATE SUBSCRIPTION 设置的参数。有关详细信息,请参阅该内容。可以更改的参数是 slot_namesynchronous_commitbinarystreamingdisable_on_errorpassword_requiredrun_as_owneroriginfailover。只有超级用户可以设置 password_required = false

更改 slot_name 时,命名槽位的 failovertwo_phase 属性值可能与订阅中指定的对应 failovertwo_phase 参数不同。创建槽位时,确保槽位属性 failovertwo_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 SUBSCRIPTIONPostgreSQL 扩展。

提交更正

如果您在文档中发现任何不正确的内容、与您对特定功能的体验不符或需要进一步说明,请使用 此表格 报告文档问题。