封存回呼定義了模組實際的封存行為。伺服器會根據需要呼叫它們來處理每個 WAL 檔案。
startup_cb
回呼會在模組載入後不久被呼叫。此回呼可用於執行任何其他需要的初始化。如果封存模組有任何狀態,它可以使用 state->private_data
來儲存它。
typedef void (*ArchiveStartupCB) (ArchiveModuleState *state);
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
行發出。
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
回呼中建立一個記憶體環境。
shutdown_cb
回呼在封存器程序退出(例如,在發生錯誤後)或 archive_library 的值變更時被呼叫。如果沒有定義 shutdown_cb
,在這些情況下不會採取任何特殊動作。如果封存模組有任何狀態,此回呼應釋放它以避免記憶體洩漏。
typedef void (*ArchiveShutdownCB) (ArchiveModuleState *state);
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的內容,請使用此表單回報文件問題。