2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5

第 48 章。下層複製進度跟蹤

複製源旨在使基於邏輯解碼實現邏輯複製解決方案更加容易。它們解決了兩個常見的問題:

  • 如何安全地跟蹤複製進度

  • 如何根據行的來源更改複製行為;例如,以防止雙向複製設定中的迴圈。

複製源只有兩個屬性:名稱和 ID。名稱(用於跨系統引用源)是自由形式的 text。它應該以一種不大可能與不同複製解決方案建立的複製源發生衝突的方式使用;例如,在其前面加上覆制解決方案的名稱。ID 僅用於在空間效率很重要的情況下避免儲存長名稱。它絕不應在系統之間共享。

可以使用函式 pg_replication_origin_create() 建立複製源,使用 pg_replication_origin_drop() 刪除複製源,並在 pg_replication_origin 系統目錄中檢視。

構建複製解決方案的一個棘手部分是安全地跟蹤重放進度。當應用程序或整個叢集崩潰時,必須能夠知道資料已成功複製到何處。對此的簡單解決方案(例如,為每條重放的事務在表中更新一行)存在執行時開銷和資料庫膨脹等問題。

使用複製源基礎結構,可以透過函式 pg_replication_origin_session_setup() 將會話標記為從遠端節點重放。此外,LSN並且可以使用 pg_replication_origin_xact_setup() 按事務為每個源事務的提交時間戳進行配置。如果這樣做,重放進度將以崩潰安全的方式持久化。可以在 pg_replication_origin_status 檢視中檢視所有複製源的重放進度。可以使用 pg_replication_origin_progress()(用於任何源)或 pg_replication_origin_session_progress()(用於當前會話中配置的源)來獲取單個源的進度,例如在恢復複製時。

在比從一個系統精確複製到另一個系統更復雜的複製拓撲中,另一個問題是很難避免再次複製重放過的行。這可能導致複製中的迴圈和效率低下。複製源提供了一個可選機制來識別和防止這種情況。當使用前一段引用的函式配置時,由會話生成的傳遞給輸出外掛回撥(參見第 47.6 節)的每個更改和事務都會被標記為生成會話的複製源。這允許在輸出外掛中以不同的方式處理它們,例如,忽略除本地生成的行之外的所有行。此外,filter_by_origin_cb 回撥可用於基於源過濾邏輯解碼更改流。雖然靈活性較低,但透過該回調進行過濾比在輸出外掛中進行過濾效率高得多。

提交更正

如果您在文件中發現任何不正確的內容、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用此表單報告文件問題。