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);
报告文档问题
阅读 上游文档. 通过 PostgreSQL 文档反馈表单.