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
、ALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ...
以及將 refresh
選項設為 true
,以及 ALTER SUBSCRIPTION ... SET (failover = true|false)
無法在交易區塊內執行。
當訂閱啟用 two_phase
commit 時,也無法執行指令 ALTER SUBSCRIPTION ... REFRESH PUBLICATION
和 ALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ...
以及將 refresh
選項設為 true
,除非 copy_data
為 false
。請參閱 pg_subscription
的欄位 subtwophasestate
以了解實際的 two-phase 狀態。
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
。只有超級使用者才能設定 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
準備好的交易無效。 在邏輯複寫工作程序成功略過交易或完成交易後,LSN(儲存在 pg_subscription
.subskiplsn
中)將被清除。 有關邏輯複寫衝突的詳細資訊,請參閱 第 29.6 節。
skip_option
指定此操作的選項。 支援的選項為
lsn
(pg_lsn
)指定遠端交易的完成 LSN,其變更將被邏輯複寫工作程序略過。 完成 LSN 是交易已提交或準備好的 LSN。 不支援略過個別的子交易。 設定 NONE
會重設 LSN。
new_owner
#訂閱新擁有者的使用者名稱。
new_name
#訂閱的新名稱。
在指定 boolean
類型的參數時,可以省略 =
value
部分,這相當於指定 TRUE
。
將訂閱所訂閱的發布變更為 insert_only
ALTER SUBSCRIPTION mysub SET PUBLICATION insert_only;
停用 (停止) 訂閱
ALTER SUBSCRIPTION mysub DISABLE;
ALTER SUBSCRIPTION
是 PostgreSQL 擴充功能。
如果您發現文件中有任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單回報文件問題。