支援版本:目前 (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 回呼來根據來源過濾邏輯解碼變更流。雖然彈性較差,但透過該回呼進行過濾比在輸出外掛程式中進行過濾有效得多。

提交更正

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