支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10

29.1. 發佈 #

一個發佈 (publication)可以在任何實體複製的主節點上定義。 定義發佈的節點被稱為發佈者 (publisher)。 發佈是一組從一個或一組資料表中產生的變更,也可以被描述為一個變更集或複製集。 每個發佈只存在於一個資料庫中。

發佈與綱要不同,不會影響資料表的存取方式。 如果需要,每個資料表都可以被添加到多個發佈中。 發佈目前只能包含資料表和綱要中的所有資料表。 物件必須明確添加,除非為 ALL TABLES 建立發佈。

發佈可以選擇限制它們產生的變更為 INSERTUPDATEDELETETRUNCATE 的任意組合,類似於觸發器如何由特定事件類型觸發。 預設情況下,所有操作類型都會被複製。 這些發佈規格僅適用於 DML 操作;它們不會影響初始資料同步複製。 (列過濾器對 TRUNCATE 沒有效果。請參閱第 29.4 節)。

一個發佈的資料表必須配置一個副本身分 (replica identity),以便能夠複製 UPDATEDELETE 操作,以便可以在訂閱端識別要更新或刪除的適當列。 預設情況下,如果存在主鍵,則為主鍵。 另一個唯一索引(具有某些額外要求)也可以設定為副本身分。 如果資料表沒有任何合適的鍵,則可以將其設定為副本身分 FULL,這意味著整個列成為鍵。 當指定副本身分 FULL 時,可以在訂閱端使用索引來搜尋列。 候選索引必須是 btree 或 hash、非部分索引,並且最左邊的索引欄位必須是參考發佈的資料表欄位的欄位(而不是運算式)。 這些對非唯一索引屬性的限制符合對主鍵強制執行的一些限制。 如果沒有這樣的合適索引,則訂閱端的搜尋可能非常低效,因此只有在沒有其他解決方案的情況下,才應將副本身分 FULL 用作後備方案。 如果在發佈端設定了除 FULL 之外的副本身分,則還必須在訂閱端設定包含相同或更少欄的副本身分。 有關如何設定副本身分的詳細信息,請參閱 REPLICA IDENTITY。 如果將沒有副本身分的資料表添加到複製 UPDATEDELETE 操作的發佈中,則後續的 UPDATEDELETE 操作將在發佈者上導致錯誤。 無論任何副本身分如何,INSERT 操作都可以繼續進行。

每個發佈可以有多個訂閱者。

發佈是使用 CREATE PUBLICATION 命令建立的,之後可以使用相應的命令來更改或刪除。

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

提交更正

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