2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 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 PUBLICATION、帶有 refresh 選項為 trueALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ...ALTER SUBSCRIPTION ... SET (failover = true|false)ALTER SUBSCRIPTION ... SET (two_phase = false) 不能在事務塊內執行。

帶有 refresh 選項為 true 的命令 ALTER SUBSCRIPTION ... REFRESH PUBLICATIONALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ... 也不可在訂閱啟用 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 引數互動的詳細資訊,請參閱 Notes

有關以二進位制格式複製現有資料的詳細資訊,請參閱 CREATE SUBSCRIPTIONbinary 引數。

ENABLE #

啟用先前已停用的訂閱,並在事務結束時啟動邏輯複製工作程序。

DISABLE #

停用正在執行的訂閱,並在事務結束時停止邏輯複製工作程序。

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

此子句修改由 CREATE SUBSCRIPTION 最初設定的引數。有關更多資訊,請參見此處。可以修改的引數是 slot_namesynchronous_commitbinarystreamingdisable_on_errorpassword_requiredrun_as_owneroriginfailovertwo_phase。只有超級使用者才能設定 password_required = false

更改 slot_name 時,命名槽的 failovertwo_phase 屬性值可能與訂閱中指定的 failovertwo_phase 引數不匹配。建立槽時,請確保槽屬性 failovertwo_phase 與訂閱的對應引數匹配。否則,釋出者上的槽的行為可能與這些訂閱選項的說法不同:例如,即使訂閱的 failover 選項已停用,釋出者上的槽也可能同步到備用節點,或者即使訂閱的 failover 選項已啟用,槽也可能被停用同步。

僅當訂閱被停用時,才能更改 failovertwo_phase 引數。

當將 two_phasetrue 更改為 false 時,如果找到由邏輯複製工作程序(在 two_phase 引數仍為 true 時)準備的任何事務,後端程序會報告錯誤。您可以在釋出者節點上解決已準備的事務,或者在訂閱者上手動回滾它們,然後重試。邏輯複製工作程序準備的與特定訂閱對應的事務具有以下模式:pg_gid_%u_%u(引數:訂閱 oid,遠端事務 ID xid)。要手動解決此類事務,您需要回滾所有名稱中包含相應訂閱 ID 的已準備事務。應用程式可以檢查 pg_prepared_xacts 以查詢所需的已準備事務。在 two_phase 選項從 true 更改為 false 後,釋出者將在事務提交時重新複製它們。

SKIP ( skip_option = value ) #

跳過應用遠端事務的所有更改。如果傳入資料違反任何約束,邏輯複製將停止,直到問題解決。透過使用 ALTER SUBSCRIPTION ... SKIP 命令,邏輯複製工作程序將跳過事務中的所有資料修改更改。此選項對透過在訂閱者上啟用 two_phase 準備的事務無效。在邏輯複製工作程序成功跳過事務或完成事務後,LSN(儲存在 pg_subscription.subskiplsn 中)將被清除。有關邏輯複製衝突的詳細資訊,請參閱 Section 29.7

skip_option 指定此操作的選項。支援的選項為

lsn (pg_lsn)

指定邏輯複製工作程序要跳過更改的遠端事務的完成 LSN。完成 LSN 是事務已提交或已準備的 LSN。不支援跳過單個子事務。將 NONE 設定將重置 LSN。

new_owner #

訂閱新所有者的使用者名稱。

new_name #

訂閱的新名稱。

指定布林型別引數時,可以省略 = value 部分,這等同於指定 TRUE

示例

將訂閱訂閱的釋出更改為 insert_only

ALTER SUBSCRIPTION mysub SET PUBLICATION insert_only;

停用(停止)訂閱

ALTER SUBSCRIPTION mysub DISABLE;

相容性

ALTER SUBSCRIPTIONPostgreSQL 的一個擴充套件。

提交更正

如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。