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
,則只有超級使用者才能修改它。
刷新發布時,我們會刪除不再屬於該釋出的關聯,並且還會刪除任何表同步槽。刪除這些槽是必要的,以便釋放遠端主機上為訂閱分配的資源。如果由於網路中斷或其他錯誤,PostgreSQL 無法刪除這些槽,則會報告錯誤。要在此情況下繼續操作,使用者需要重試操作,或將槽與訂閱解除關聯並刪除訂閱,具體方法請參見 DROP SUBSCRIPTION。
命令 ALTER SUBSCRIPTION ... REFRESH PUBLICATION
、帶有 refresh
選項為 true
的 ALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ...
、ALTER SUBSCRIPTION ... SET (failover = true|false)
和 ALTER SUBSCRIPTION ... SET (two_phase = false)
不能在事務塊內執行。
帶有 refresh
選項為 true
的命令 ALTER SUBSCRIPTION ... REFRESH PUBLICATION
和 ALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ...
也不可在訂閱啟用 two_phase
提交時執行,除非 copy_data
為 false
。請參見 pg_subscription
的 subtwophasestate
列以瞭解實際的兩階段提交狀態。
name
#要更改其屬性的訂閱的名稱。
CONNECTION 'conninfo
'
#此子句替換由 CREATE SUBSCRIPTION 最初設定的連線字串。有關更多資訊,請參見此處。
SET PUBLICATION publication_name
ADD PUBLICATION publication_name
DROP PUBLICATION publication_name
#這些形式更改訂閱的釋出列表。 SET
用新列表替換整個釋出列表,ADD
將額外的釋出新增到釋出列表中,而 DROP
從釋出列表中刪除釋出。我們允許在 ADD
和 SET
變體中指定不存在的釋出,以便使用者稍後新增它們。有關更多資訊,請參見 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
和 two_phase
。只有超級使用者才能設定 password_required = false
。
更改 slot_name
時,命名槽的 failover
和 two_phase
屬性值可能與訂閱中指定的 failover
和 two_phase
引數不匹配。建立槽時,請確保槽屬性 failover
和 two_phase
與訂閱的對應引數匹配。否則,釋出者上的槽的行為可能與這些訂閱選項的說法不同:例如,即使訂閱的 failover
選項已停用,釋出者上的槽也可能同步到備用節點,或者即使訂閱的 failover
選項已啟用,槽也可能被停用同步。
僅當訂閱被停用時,才能更改 failover
和 two_phase
引數。
當將 two_phase
從 true
更改為 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 SUBSCRIPTION
是 PostgreSQL 的一個擴充套件。
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。