Postgresql 中文操作指南

ALTER SUBSCRIPTION

ALTER SUBSCRIPTION ——更改订阅的定义

Synopsis

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

Description

ALTER SUBSCRIPTION 可以更改大多数可于 CREATE SUBSCRIPTION 中指定的订阅属性。

您必须拥有 ALTER SUBSCRIPTION 的所有权,才能使用它。要重命名订阅或更改所有者,您必须具有数据库的 CREATE 权限。另外,要更改所有者,您必须能够 SET ROLE 至新的所有者角色。如果订阅具有 password_required=false ,则只有超级用户才能修改它。

在刷新发布时,我们将移除不再是发布一部分的关系,并且如果存在任何表同步插槽,我们也将移除它们。移除这些插槽是必要的,以便释放为远程主机上的订阅分配的资源。如果由于网络中断或某些其他错误,PostgreSQL 无法移除插槽,它将报告一个错误。出现这种情况时,用户需要重试该操作或从订阅中取消关联插槽,并按照 DROP SUBSCRIPTION 中的说明删除订阅。

具有 refresh 选项的命令 ALTER SUBSCRIPTION …​ REFRESH PUBLICATIONALTER SUBSCRIPTION …​ {SET|ADD|DROP} PUBLICATION …​ 不可以执行于事务块内。在订阅启用了 two_phase 提交时,这些命令也不能执行,除非 copy_datafalse 。请参阅 pg_subscription 的列 subtwophasestate 以了解实际的两阶段状态。

Parameters

  • name

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

  • CONNECTION '_conninfo'_

    • 此子句替换由 CREATE SUBSCRIPTION 原始设置的连接字符串。请参阅此处以获取更多信息。

  • SET PUBLICATION _publication_name_ADD PUBLICATION _publication_nameDROP PUBLICATION _publication_name

    • 这些格式更改订阅的发布列表。 SET 以新列表替换整个发布列表, ADD 向发布列表中添加其他发布, DROP 从发布列表中移除发布。我们允许在 ADDSET 变体中指定不存在的发布,以便用户稍后添加它们。请参阅 CREATE SUBSCRIPTION 以获取更多信息。默认情况下,此命令还将像 REFRESH PUBLICATION 一样执行。

    • publication_option 为此操作指定了附加选项。受支持的选项有:

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

  • REFRESH PUBLICATION

    • 从发布者获取缺失的表信息。这将启动对自 CREATE SUBSCRIPTION 或上次调用 REFRESH PUBLICATION 以来添加到要订阅的发布中的表的复制。

    • refresh_option 为刷新操作指定了附加选项。受支持的选项有:

  • ENABLE

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

  • DISABLE

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

  • SET ( _subscription_parameter [= value ] [, …​ ] )_

  • SKIP ( _skip_option = value )_

    • 跳过应用远程事务的所有更改。如果传入数据违反任何约束,则会停止逻辑复制,直至其得到解决。通过使用 ALTER SUBSCRIPTION …​ SKIP 命令,逻辑复制工作程序跳过事务中的所有数据修改更改。此选项对已经在订户上启用 two_phase 而准备好的事务没有影响。在逻辑复制工作程序成功跳过事务或完成事务之后,LSN (存储在 pg_subscription . subskiplsn 中) 会被清除。请参阅 Section 31.5 以了解有关逻辑复制冲突的详细信息。

    • skip_option 为此操作指定选项。受支持的选项是:

  • new_owner

    • 订阅新所有者的用户名称。

  • new_name

    • 订阅的新名称。

  • refresh (boolean)

    • 若为 false,该命令将不会尝试刷新表格信息。应分离执行 REFRESH PUBLICATION 。默认值为 true

  • copy_data (boolean)

    • 指定在复制启动时是否复制正在订阅的出版物中的现有数据。默认值为 true

    • 即使表格的行筛选器 WHERE 子句已被修改,之前订阅的表格也未被复制。

    • 请参阅 Notes 了解 copy_data = true 如何与 origin 参数交互的详细信息。

    • 请参阅 CREATE SUBSCRIPTIONbinary 参数,了解有关以二进制格式复制现有数据的详细信息。

  • lsn (pg_lsn)

    • 指定应跳过其更改的远程事务的结束 LSN,该过程由逻辑复制工作器完成。结束 LSN 是事务提交或准备就绪时的 LSN。不支持跳过单独的子事务。设置 NONE 将重置 LSN。

在指定类型为 boolean 的参数时,可以省略 = value 部分,这等同于指定 TRUE

Examples

将订阅订阅的出版物更改为 insert_only :

ALTER SUBSCRIPTION mysub SET PUBLICATION insert_only;

禁用(停止)订阅:

ALTER SUBSCRIPTION mysub DISABLE;

Compatibility

ALTER SUBSCRIPTION 是一个 PostgreSQL 扩展。