pglogical 擴充功能、優點和限制。
總覽
pglogical 擴充功能是專為 PostgreSQL 設計的邏輯複製工具,功能強大且彈性,並支援高可用性 (HA) 和災難復原 (DR)。
標準二進位複製 (通常稱為「實體複製」) 會在檔案系統和區塊層級複製變更,在目標系統中產生實體鏡像。雖然實體複製功能十分強大,可保護整個資料庫叢集,但只能單向複製,且必須存取基礎資料庫資料檔案和預寫記錄檔 (WAL) 檔案。
pglogical 擴充功能則會從提供者資料庫擷取 SQL 變更並複製,然後在一個或多個訂閱者資料庫中重播。這種複製方式稱為「邏輯複製」。
使用 pglogical 擴充功能,您可以執行下列操作:
- 在多個 AlloyDB Omni 資料庫之間複製資料。
- 在 AlloyDB Omni 和 Google Cloud AlloyDB 之間複製資料。
- 在 AlloyDB Omni 和其他 PostgreSQL 發行版本 (包括許多第三方雲端服務) 之間複製資料。
優點
使用 pglogical 擴充功能進行邏輯複製,可帶來下列好處:
選擇性複製:可彈性設定篩選器和規則,決定要複製哪些資料,以及複製到何處。您可以選擇要納入哪些資料表,以及如何處理新資料表 (無論是否納入)。你也可以新增欄和列篩選器。如果您希望訂閱者代表提供者的某個過去時間點,可以視需要新增
apply delay。雙向和多主項複製:所有成員資料庫都處於讀取或寫入狀態,且完全可用。每個端點資料庫都會做為供應商和訂閱者,因此可以建立進階的複製情境,並在不同端點更新資料。
雲端服務供應商支援:Google 等雲端服務供應商認可
pglogical擴充功能的價值,並將其整合至雲端服務,例如 Google Cloud SQL for PostgreSQL 和 AlloyDB。其他雲端供應商也提供pglogical擴充功能選項,可支援多雲端或混合雲設定。跨版本複製:由於 pglogical 會複製實際的 SQL 陳述式,因此允許在 PostgreSQL 的主要版本之間進行複製。尤其是當供應商來源資料庫的版本低於訂閱者目標資料庫時,跨版本複製功能可以可靠地實作。
pglogical擴充功能支援許多舊版 PostgreSQL,例如 9.4 以上版本。因此,如果需要處理舊版系統,並想將資料複製到較新版本的 PostgreSQL (例如 AlloyDB Omni 和 Google Cloud AlloyDB 使用的版本),這項工具就是理想選擇。
總之,pglogical 擴充功能提供功能豐富的邏輯複製解決方案,並與舊版 PostgreSQL 和雲端代管服務相容,包括 Google Cloud SQL for PostgreSQL 和 AlloyDB。
邏輯複製的限制
所有邏輯複製技術 (包括用於其他關聯式資料庫平台的技術) 都有一些限制,任何管理不當都可能中斷複製程序。
如要確保導入作業順利進行,請注意下列事項:
- 考量如何處理複製範圍外的資料庫範圍和叢集範圍物件。
pglogical擴充功能會在資料庫層級運作,且僅適用於一組指定的資料表和序列。函式和程序等其他物件類型,則必須使用其他方法複製。 - 建議所有複寫資料表都必須有主鍵。
您可以使用表格
REPLICA IDENTITY功能,告知pglogical擴充功能哪些資料欄可做為資料列的唯一識別資訊。請盡可能避免這種情況。沒有主鍵、本質上為靜態,且從未UPDATED或DELETED,僅支援INSERTS的資料表。這類資料表不需要主鍵。 - 管理訂閱者資料庫中的觸發條件和序列。根據預設,觸發條件會定義為
ORIGIN或LOCAL觸發條件,且在複製資料列時,不會在訂閱者資料庫上觸發。請檢查所有觸發條件,確保任何觸發條件都已設定REPLICA選項,這樣除非必要,否則不會在訂閱者端觸發。 - 透過
who wins規則手動或自動解決衝突。 - 手動在所有端點上實作,或使用供應商資料庫上適當的
pglogicalAPI 函式,將資料定義語言 (DDL) 指令自動複製到訂閱者資料庫。 - 確保新建立的資料表和序列,會手動或自動新增至主要資料庫的複製集。
- 確保複製拓撲中的所有端點之間存在健全、高效能、可靠且安全的 TCP 網路。
pglogical 擴充功能的其他限制包括:
pglogical2.4.3 版需要超級使用者權限。- 雖然大多數資料表和序列都可以複製,但
pglogical擴充功能不會複製其他物件類型,也不會複製TEMPORARY和UNLOGGED資料表。 - 如要複製 DDL,必須使用 pglogical API 函式。標準 DDL
指令不會複製,但
TRUNCATE指令除外。 - 在每個資料表和序列的物件層級運作,並在每個資料庫部署。這表示部分物件 (包括叢集範圍物件,例如
users和roles) 會從複製作業中排除,必須另外管理。