關於 pglogical 擴充功能

本頁面將概略介紹 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 規則手動或自動解決衝突。
  • 手動在所有端點上實作,或使用供應商資料庫上適當的 pglogical API 函式,將資料定義語言 (DDL) 指令自動複製到訂閱者資料庫。
  • 確保新建立的資料表和序列,會手動或自動新增至主要資料庫的複製集。
  • 確保複製拓撲中的所有端點之間存在健全、高效能、可靠且安全的 TCP 網路。

pglogical 擴充功能的其他限制包括:

  • pglogical 2.4.3 版需要超級使用者權限。
  • 雖然大多數資料表和序列都可以複製,但 pglogical 擴充功能不會複製其他物件類型,也不會複製 TEMPORARY 和 UNLOGGED 資料表。
  • 如要複製 DDL,必須使用 pglogical API 函式。標準 DDL 指令不會複製,但 TRUNCATE 指令除外。
  • 在每個資料表和序列的物件層級運作,並在每個資料庫部署。這表示部分物件 (包括叢集範圍物件,例如 users 和 roles) 會從複製作業中排除,必須另外管理。

後續步驟