9.3 9.4 9.5 9.6 10 11 12 13 14 Current(15)
阿里云PostgreSQL 问题报告 纠错本页面

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,你必须拥有该订阅。要改变所有者, 你也必须是新所有者的直接或间接成员。新所有者必须是超级用户。(目前, 所有的订阅所有者必须是超级用户,所以所有者的检查将在实践中被绕过, 但这可能在未来发生变化。)

刷新publication时,我们会删除不再属于publication的关系,如果有的话,还会删除表同步插槽。 必须删除这些插槽,以便释放在远程主机上为订阅分配的资源。如果由于网络故障或其他错误, PostgreSQL无法删除插槽,则会报告错误。在这种情况下,用户需要 重新尝试操作或按照DROP SUBSCRIPTION中的说明取消订阅并删除插槽。

命令ALTER SUBSCRIPTION ... REFRESH PUBLICATIONALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ... 选项为truerefresh不能在事务块内执行。 当订阅启用two_phase提交时,这些命令也不能执行, 除非copy_datafalse。 查看pg_subscriptionsubtwophasestate列 以了解实际的两阶段状态。

参数

name

要修改属性的订阅的名称。

CONNECTION 'conninfo'

本条款替换了最初由CREATE SUBSCRIPTION设置的连接字符串。更多信息请参见那里。

SET PUBLICATION publication_name
ADD PUBLICATION publication_name
DROP PUBLICATION publication_name

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

publication_option指定了这个操作的附加选项。 支持的选项是:

refresh (boolean)

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

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

REFRESH PUBLICATION

从发布者那里获取缺失的表信息。这将开始复制自CREATE SUBSCRIPTION或 上次调用REFRESH PUBLICATION以来添加到订阅publication的表。

refresh_option指定刷新操作的附加选项。支持的选项包括:

copy_data (boolean)

指定在复制操作开始时是否复制正在订阅的publication中的预先存在的数据。默认值为true

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

ENABLE

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

DISABLE

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

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

本条款修改了最初由CREATE SUBSCRIPTION设置的参数。更多信息请参见那里。 可以修改的参数包括slot_namesynchronous_commitbinarystreamingdisable_on_error

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

订阅的新名称。

示例

将订阅的发布更改为insert_only

ALTER SUBSCRIPTION mysub SET PUBLICATION insert_only;

禁用(停止)订阅:

ALTER SUBSCRIPTION mysub DISABLE;

兼容性

ALTER SUBSCRIPTIONPostgreSQL 的一个扩展。

又见

CREATE SUBSCRIPTION, DROP SUBSCRIPTION, CREATE PUBLICATION, ALTER PUBLICATION