Skip to content

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,不能在事务块内执行。当订阅已启用two_phase提交时,也无法执行这些命令,除非copy_datafalse。请参阅pg_subscriptionsubtwophasestate列以了解实际的两阶段状态。

参数

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_ownerorigin。只有超级用户可以设置 password_required = false

SKIP ( skip_option = value )

跳过应用远程事务的所有更改。如果传入数据违反任何约束,逻辑复制将停止,直至解决该问题。通过使用 ALTER SUBSCRIPTION ... SKIP 命令,逻辑复制工作程序将跳过事务中的所有数据修改更改。此选项对已通过在订阅者上启用 two_phase 准备的事务没有影响。在逻辑复制工作程序成功跳过事务或完成事务后,LSN(存储在 pg_subscription.subskiplsn)中)将被清除。有关逻辑复制冲突的详细信息,请参见 第 31.5 节

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扩展。

另请参见

CREATE SUBSCRIPTIONDROP SUBSCRIPTIONCREATE PUBLICATIONALTER PUBLICATION