支援的版本: 目前 (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. 關閉回呼 #

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

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

提交更正

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