一個發佈 (publication)可以在任何實體複製的主節點上定義。 定義發佈的節點被稱為發佈者 (publisher)。 發佈是一組從一個或一組資料表中產生的變更,也可以被描述為一個變更集或複製集。 每個發佈只存在於一個資料庫中。
發佈與綱要不同,不會影響資料表的存取方式。 如果需要,每個資料表都可以被添加到多個發佈中。 發佈目前只能包含資料表和綱要中的所有資料表。 物件必須明確添加,除非為 ALL TABLES
建立發佈。
發佈可以選擇限制它們產生的變更為 INSERT
、UPDATE
、DELETE
和 TRUNCATE
的任意組合,類似於觸發器如何由特定事件類型觸發。 預設情況下,所有操作類型都會被複製。 這些發佈規格僅適用於 DML 操作;它們不會影響初始資料同步複製。 (列過濾器對 TRUNCATE
沒有效果。請參閱第 29.4 節)。
一個發佈的資料表必須配置一個副本身分 (replica identity),以便能夠複製 UPDATE
和 DELETE
操作,以便可以在訂閱端識別要更新或刪除的適當列。 預設情況下,如果存在主鍵,則為主鍵。 另一個唯一索引(具有某些額外要求)也可以設定為副本身分。 如果資料表沒有任何合適的鍵,則可以將其設定為副本身分 FULL
,這意味著整個列成為鍵。 當指定副本身分 FULL
時,可以在訂閱端使用索引來搜尋列。 候選索引必須是 btree 或 hash、非部分索引,並且最左邊的索引欄位必須是參考發佈的資料表欄位的欄位(而不是運算式)。 這些對非唯一索引屬性的限制符合對主鍵強制執行的一些限制。 如果沒有這樣的合適索引,則訂閱端的搜尋可能非常低效,因此只有在沒有其他解決方案的情況下,才應將副本身分 FULL
用作後備方案。 如果在發佈端設定了除 FULL
之外的副本身分,則還必須在訂閱端設定包含相同或更少欄的副本身分。 有關如何設定副本身分的詳細信息,請參閱 REPLICA IDENTITY
。 如果將沒有副本身分的資料表添加到複製 UPDATE
或 DELETE
操作的發佈中,則後續的 UPDATE
或 DELETE
操作將在發佈者上導致錯誤。 無論任何副本身分如何,INSERT
操作都可以繼續進行。
每個發佈可以有多個訂閱者。
發佈是使用 CREATE PUBLICATION
命令建立的,之後可以使用相應的命令來更改或刪除。
可以使用 ALTER PUBLICATION
動態添加和刪除個別資料表。 ADD TABLE
和 DROP TABLE
操作都是事務性的;因此,一旦事務提交,資料表將在正確的快照處開始或停止複製。
如果您在文件中發現任何不正確、與您特定功能的經驗不符或需要進一步澄清的地方,請使用此表單來報告文件問題。