2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15
開發版本: devel

49.2. 歸檔模組回撥 #

歸檔回撥定義了模組實際的歸檔行為。伺服器會在需要時呼叫它們來處理每個單獨的 WAL 檔案。

49.2.1. 啟動回撥 #

當模組載入後不久,會呼叫 startup_cb 回撥。此回撥可用於執行任何額外的初始化。如果歸檔模組有任何狀態,可以使用 state->private_data 來儲存它。

typedef void (*ArchiveStartupCB) (ArchiveModuleState *state);

49.2.2. 檢查回撥 #

呼叫 check_configured_cb 回撥來確定模組是否已完全配置並準備好接受 WAL 檔案(例如,其配置引數是否設定為有效值)。如果沒有定義 check_configured_cb,伺服器將始終假定模組已配置。

typedef bool (*ArchiveCheckConfiguredCB) (ArchiveModuleState *state);

如果返回 true,伺服器將透過呼叫 archive_file_cb 回撥來繼續歸檔檔案。如果返回 false,則不會進行歸檔,並且歸檔器會向伺服器日誌發出以下訊息

WARNING:  archive_mode enabled, yet archiving is not configured

在後一種情況下,伺服器將定期呼叫此函式,並且只有當它返回 true 時才會進行歸檔。

注意

當返回 false 時,將一些額外資訊附加到通用警告訊息可能會很有用。為此,在返回 false 之前,透過 arch_module_check_errdetail 宏提供一條訊息。與 errdetail() 一樣,此宏接受一個格式字串,後跟一個可選的引數列表。生成的字串將作為警告訊息的 DETAIL 行發出。

49.2.3. 歸檔回撥 #

呼叫 archive_file_cb 回撥來歸檔單個 WAL 檔案。

typedef bool (*ArchiveFileCB) (ArchiveModuleState *state, const char *file, const char *path);

如果返回 true,伺服器將繼續執行,就好像檔案已成功歸檔一樣,這可能包括回收或刪除原始 WAL 檔案。如果返回 false 或丟擲錯誤,伺服器將保留原始 WAL 檔案並在稍後重試歸檔。file 只包含要歸檔的 WAL 檔案的檔名,而 path 包含 WAL 檔案的完整路徑(包括檔名)。

注意

archive_file_cb 回撥在一個短暫的記憶體上下文中被呼叫,該上下文將在每次呼叫之間重置。如果您需要更長期的儲存,請在模組的 startup_cb 回撥中建立一個記憶體上下文。

49.2.4. 關閉回撥 #

當歸檔程序退出(例如,在發生錯誤後)或 archive_library 的值發生更改時,將呼叫 shutdown_cb 回撥。如果沒有定義 shutdown_cb,則在這些情況下不會採取特殊操作。如果歸檔模組有任何狀態,此回撥應釋放它以避免記憶體洩漏。

typedef void (*ArchiveShutdownCB) (ArchiveModuleState *state);

提交更正

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