關於 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 擴充功能的價值,並將其整合至雲端服務,例如 PostgreSQL 適用的 Google Cloud SQL 和 AlloyDB。其他雲端服務供應商也將 pglogical 擴充功能納入選項,支援多雲端或混合雲設定。

  • 跨版本複製:pglogical 會複製實際的 SQL 陳述式,因此允許在 PostgreSQL 主要版本之間進行複製。特別是當供應商來源資料庫的版本低於訂閱者目標資料庫時,跨版本複製作業可穩定執行。

    pglogical 擴充功能支援許多舊版 PostgreSQL,例如 9.4 以上版本。因此,如果您要處理舊版系統,並想將資料複製到較新版本的 PostgreSQL (例如 AlloyDB Omni 和 AlloyDB 所用的版本),這就是最佳選擇。 Google Cloud

總而言之,pglogical 擴充功能提供功能豐富的邏輯複製解決方案,可與舊版 PostgreSQL 和雲端管理服務 (包括 PostgreSQL 適用的 Google Cloud SQL 和 AlloyDB) 相容。

邏輯複寫的限制

所有邏輯複製技術 (包括用於其他關聯式資料庫平台的技術) 都有一些限制,任何管理不當都可能中斷複製程序。

如要確保導入作業順利進行,請注意下列事項:

  • 考量如何處理不在複製範圍內的資料庫範圍和叢集範圍物件。pglogical 擴充功能適用於資料庫層級,且僅適用於一組指定的資料表和序列。其他物件類型 (例如函式和程序) 必須使用其他方法複製。
  • 建議所有複寫資料表都必須有主鍵。 您可以利用資料表 REPLICA IDENTITY 功能,告知 pglogical 擴充功能哪些資料欄可做為資料列的專屬 ID。請盡可能避免發生這種情況。沒有主鍵的資料表本質上是靜態的,且絕不會 UPDATEDDELETED,只支援 INSERTS。這類資料表不需要主鍵。
  • 管理訂閱者資料庫中的觸發條件和序列。根據預設,觸發條件會定義為 ORIGINLOCAL 觸發條件,且在複製資料列時,不會在訂閱者資料庫中觸發。請檢查所有觸發條件,確保已為任何觸發條件設定「REPLICA」選項,這樣一來,除非必要,否則系統不會在訂閱者端觸發觸發條件。
  • 手動或透過who wins規則自動解決衝突。
  • 複製資料定義語言 (DDL) 指令,方法是在所有端點上手動實作,或使用供應商資料庫中適當的 pglogical API 函式,將 DDL 自動複製到訂閱者資料庫。
  • 確保新建立的資料表和序列會手動或自動新增至主要資料庫的複寫集。
  • 確保複製拓撲中的所有端點之間都有健全、高效、可靠且安全的 TCP 網路。

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

  • 使用 pglogical 2.4.3 版時,必須具備超級使用者權限。
  • 雖然大多數資料表和序列都可以複製,但 pglogical 擴充功能不會複製其他物件類型,且 TEMPORARYUNLOGGED 資料表也不會複製。
  • 如要複製 DDL,必須使用 pglogical API 函式。系統不會複製原生 DDL 指令,但 TRUNCATE 指令除外。
  • 以資料表和序列為單位運作,並以資料庫為單位部署。也就是說,部分物件 (包括叢集範圍物件,例如 usersroles) 不會複製,必須另外管理。

後續步驟