邏輯複製目前有以下限制或缺少功能。 這些可能會在未來的版本中解決。
資料庫綱要和 DDL 命令不會被複製。 初始綱要可以使用 pg_dump --schema-only
手動複製。 後續的綱要變更需要手動保持同步。(但是請注意,不需要在兩端擁有完全相同的綱要。)當活動資料庫中的綱要定義發生變更時,邏輯複製是很穩健的:當發布者上的綱要變更且複製的資料開始傳送到訂閱者,但資料不符合表格綱要時,複製將會出錯,直到綱要更新為止。在許多情況下,可以先將附加的綱要變更套用到訂閱者,以避免間歇性錯誤。
序列資料不會被複製。由序列支援的 serial 或 identity 資料行中的資料當然會被複製為表格的一部分,但序列本身仍會在訂閱者上顯示起始值。如果訂閱者用作唯讀資料庫,那麼這通常不會是一個問題。但是,如果打算將訂閱者資料庫切換或故障轉移到某種類型,則需要將序列更新為最新值,可以透過從發布者複製目前的資料(可能使用 pg_dump
)或透過從表格本身判斷足夠高的值。
支援複製 TRUNCATE
命令,但是在截斷由外鍵連線的表格群組時,必須小心。當複製截斷動作時,訂閱者將會截斷與發布者上截斷的相同表格群組,無論是明確指定還是透過 CASCADE
隱含收集,減去不屬於訂閱的表格。如果所有受影響的表格都是同一訂閱的一部分,這將會正確運作。但是,如果訂閱者上要截斷的一些表格具有與不屬於同一(或任何)訂閱的表格的外鍵連線,則截斷動作在訂閱者上的應用將會失敗。
大型物件(請參閱第 33 章)不會被複製。除了將資料儲存在普通表格中之外,沒有其他解決方法。
只有表格(包括分割表格)支援複製。嘗試複製其他類型的關聯,例如檢視表、具體化檢視表或外部表格,將會導致錯誤。
當在分割表格之間複製時,預設情況下,實際的複製源自發布者上的葉子分割區,因此發布者上的分割區也必須作為有效的目標表格存在於訂閱者上。(它們可以是葉子分割區本身,或者它們可以被進一步子分割,或者它們甚至可以是獨立的表格。)發布項目也可以指定,變更應該使用分割根表格的身分和綱要來複製,而不是使用實際發生變更的個別葉子分割區的身分和綱要(請參閱 publish_via_partition_root
CREATE PUBLICATION
的參數)。
當在已發布的表格上使用 REPLICA IDENTITY FULL
時,請務必注意,如果表格包含具有資料類型(例如 point 或 box)的屬性,且這些屬性沒有 B-tree 或 Hash 的預設運算子類別,則無法將 UPDATE
和 DELETE
作業套用到訂閱者。但是,可以透過確保表格具有為其定義的主鍵或複製身分來克服此限制。
如果您在文件中發現任何不正確、與特定功能的使用經驗不符或需要進一步澄清的地方,請使用此表單來報告文件問題。