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);

提交更正

如果您在文档中发现任何不正确之处,与您对特定功能的体验不符,或者需要进一步澄清,请使用 此表单 报告文档问题。