2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10

29.1. 釋出 #

任何物理複製主伺服器都可以定義一個釋出。定義釋出節點的節點被稱為釋出者。釋出是指從表或一組表中生成的一組更改,也可以描述為更改集或複製集。每個釋出只存在於一個數據庫中。

釋出與模式不同,並且不影響表如何被訪問。如果需要,每個表都可以新增到多個釋出中。目前,釋出只能包含表和模式中的所有表。物件必須顯式新增,除非釋出是為ALL TABLES建立的。

釋出可以選擇將其生成的更改限制為INSERTUPDATEDELETETRUNCATE的任意組合,這與觸發器如何由特定事件型別觸發類似。預設情況下,所有操作型別都會被複制。這些釋出規範僅適用於 DML 操作;它們不影響初始資料同步複製。(行過濾器對TRUNCATE無效。參見第 29.4 節)。

每個釋出都可以有多個訂閱者。

釋出使用 CREATE PUBLICATION 命令建立,之後可以使用相應的命令進行修改或刪除。

可以使用 ALTER PUBLICATION 動態新增和刪除單個表。ADD TABLEDROP TABLE 操作都是事務性的,因此一旦事務提交,表將在正確的快照點開始或停止複製。

29.1.1. 副本標識 #

為了能夠複製 UPDATEDELETE 操作,被髮布的表必須配置副本標識,以便在訂閱者端能夠識別要更新或刪除的相應行。

預設情況下,這是主鍵(如果存在)。也可以設定另一個唯一索引(帶有某些附加要求)作為副本標識。如果表沒有任何合適的鍵,則可以將其設定為副本標識 FULL,這意味著整行都成為鍵。當指定副本標識 FULL 時,可以在訂閱者端使用索引來搜尋行。候選索引必須是 btree 或 hash 型別,非部分索引,並且最左邊的索引欄位必須是一個列(而不是表示式),該列引用被髮布表的列。這些對非唯一索引屬性的限制遵循了對主鍵強制執行的一些限制。如果不存在這樣的合適索引,訂閱者端的搜尋可能會非常低效,因此副本標識 FULL 僅應作為備選方案,在沒有其他解決方案可能時使用。

如果在釋出者端設定了除 FULL 以外的副本標識,則訂閱者端也必須設定相同或更少列的副本標識。

副本標識定義為 NOTHING、沒有主鍵的 DEFAULT 或已刪除索引的 USING INDEX 的表,在包含在複製這些操作的釋出中時,不支援 UPDATEDELETE 操作。嘗試執行此類操作將在釋出者端導致錯誤。

INSERT 操作可以正常進行,而無需考慮任何副本標識。

有關如何設定副本標識的詳細資訊,請參閱 ALTER TABLE...REPLICA IDENTITY

提交更正

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