關於 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 函式。除了 TRUNCATE 指令外,標準 DDL 指令不會複製。
  • 這項作業會針對每個資料表和每個序列的物件層級執行,並部署至每個資料庫。也就是說,部分物件 (包括叢集範圍的物件,例如 users 和 roles) 會排除在複製作業之外,必須另外管理。

後續步驟