ALTER SUBSCRIPTION — 修改订阅的定义
ALTER SUBSCRIPTIONname
CONNECTION 'conninfo
' ALTER SUBSCRIPTIONname
SET PUBLICATIONpublication_name
[, ...] [ WITH (publication_option
[=value
] [, ... ] ) ] ALTER SUBSCRIPTIONname
ADD PUBLICATIONpublication_name
[, ...] [ WITH (publication_option
[=value
] [, ... ] ) ] ALTER SUBSCRIPTIONname
DROP PUBLICATIONpublication_name
[, ...] [ WITH (publication_option
[=value
] [, ... ] ) ] ALTER SUBSCRIPTIONname
REFRESH PUBLICATION [ WITH (refresh_option
[=value
] [, ... ] ) ] ALTER SUBSCRIPTIONname
ENABLE ALTER SUBSCRIPTIONname
DISABLE ALTER SUBSCRIPTIONname
SET (subscription_parameter
[=value
] [, ... ] ) ALTER SUBSCRIPTIONname
SKIP (skip_option
=value
) ALTER SUBSCRIPTIONname
OWNER TO {new_owner
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER SUBSCRIPTIONname
RENAME TOnew_name
ALTER SUBSCRIPTION
可以修改大部分可以在
CREATE SUBSCRIPTION中指定的订阅属性。
您必须拥有订阅才能使用ALTER SUBSCRIPTION
。
要重命名订阅或更改所有者,您必须对数据库具有
CREATE
权限。此外,
要更改所有者,您必须能够SET ROLE
为新的所有角色。
如果订阅设置了password_required=false
,
只有超级用户可以修改它。
刷新publication时,我们会删除不再属于publication的关系,如果有的话,还会删除表同步插槽。 必须删除这些插槽,以便释放在远程主机上为订阅分配的资源。如果由于网络故障或其他错误, PostgreSQL无法删除插槽,则会报告错误。在这种情况下,用户需要 重新尝试操作或按照DROP SUBSCRIPTION中的说明取消订阅并删除插槽。
命令 ALTER SUBSCRIPTION ... REFRESH PUBLICATION
、
ALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ...
带有 refresh
选项为 true
,以及
ALTER SUBSCRIPTION ... SET (failover = true|false)
不能在事务块内执行。
命令 ALTER SUBSCRIPTION ... REFRESH PUBLICATION
和
ALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ...
带有 refresh
选项为 true
时,也不能在订阅启用
two_phase
提交的情况下执行,除非
copy_data
为 false
。请参见 subtwophasestate
列,
该列位于 pg_subscription
中,以了解实际的两阶段状态。
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。
我们允许在ADD
和SET
变体中指定不存在的publication,
以便用户以后可以添加这些publication。有关更多信息,请参见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
预备的事务无效。
逻辑复制工作进程成功跳过事务或完成事务后,存储在
pg_subscription
.subskiplsn
中的LSN
会被清除。有关逻辑复制冲突的详细信息,请参见
Section 29.6。
skip_option
指定此操作的选项。支持的选项是:
lsn
(pg_lsn
)
指定要被逻辑复制工作者跳过的远程事务的完成LSN。完成LSN是事务提交或准备的LSN。
不支持跳过单个子事务。设置NONE
会重置LSN。
new_owner
#订阅的新所有者的用户名。
new_name
#订阅的新名称。
当指定类型为boolean
的参数时,
=
值
部分可以省略,这等同于指定TRUE
。
将订阅的发布更改为insert_only
:
ALTER SUBSCRIPTION mysub SET PUBLICATION insert_only;
禁用(停止)订阅:
ALTER SUBSCRIPTION mysub DISABLE;
ALTER SUBSCRIPTION
是PostgreSQL
的一个扩展。