支援的版本:目前 (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 PUBLICATIONALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ... 以及將 refresh 選項設為 true,以及 ALTER SUBSCRIPTION ... SET (failover = true|false) 無法在交易區塊內執行。

當訂閱啟用 two_phase commit 時,也無法執行指令 ALTER SUBSCRIPTION ... REFRESH PUBLICATIONALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ... 以及將 refresh 選項設為 true,除非 copy_datafalse。請參閱 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 會從發布清單中移除發布。我們允許在 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 參數互動的詳細資訊。

請參閱 CREATE SUBSCRIPTIONbinary 參數,以取得有關以二進位格式複製預先存在資料的詳細資訊。

ENABLE #

啟用先前停用的訂閱,在交易結束時啟動邏輯複製工作者。

DISABLE #

停用正在執行的訂閱,在交易結束時停止邏輯複製工作者。

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

此子句會更改最初由 CREATE SUBSCRIPTION 設定的參數。請參閱該處以取得更多資訊。可以更改的參數包括 slot_namesynchronous_commitbinarystreamingdisable_on_errorpassword_requiredrun_as_owneroriginfailover。只有超級使用者才能設定 password_required = false

在更改 slot_name 時,指定槽的 failovertwo_phase 屬性值可能與訂閱中指定的對應 failovertwo_phase 參數不同。 建立槽時,請確保槽屬性 failovertwo_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 SUBSCRIPTIONPostgreSQL 擴充功能。

提交更正

如果您發現文件中有任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單回報文件問題。