26.1. 归档恢复设置

restore_command (string)

这个本地SHELL命令是获取WAL文件系列中已归档的WAL文件。对归档恢复来说这个参数是必须的, 但对流复制来说是可选的。 字符串中的任何一个%f是用归档检索中的文件名替换, 并且%p是用服务器上的复制目的地的路径名替换。 (路径名是相对于当前工作路径的,如客户端的data路径) 任意一个%r是用包含最新可用重启点的文件名替换。这是最早的文件, 必须保留以便重新开始恢复,因此这个信息可以用于截断归档至实现从当前恢复点开始恢复的最低要求。 %r典型的只用于热备配置(参阅第 25.2 节)。 %%可以嵌入一个实际的%字符。

对命令来说,只有当成功时返回一个零退出状态是很重要的。 命令被要求归档命令中没有出现的文件名; 当为要求是,必须返回非零。如:

restore_command = 'cp /mnt/server/archivedir/%f "%p"'
restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"'  # Windows

一个例外是,如果该命令被一个信号(除了SIGTERM, 它被用作数据库服务器关闭的一部分)或该shell的一个错误(比如命令没有找到)终止, 那么恢复将退出并且服务器将不会启动。

archive_cleanup_command (string)

这个选项参数声明一个shell命令。在每次重启时会执行这个shell命令。 archive_cleanup_command为清理备库不需要的归档WAL文件提供一个机制。 任何一个%r由包含最新可用重启点的文件名代替。这是最早的文件, 因此必须保留以允许恢复能够重新启动,因此所有早于%r的文件可以安全的移除。 这个信息可以用于删除归档至能满足从当前恢复重启的最低要求。 对典型单备配置中的archive_cleanup_command而言, 经常使用pg_archivecleanup模块,比如:

archive_cleanup_command = 'pg_archivecleanup /mnt/server/archivedir %r'

然而需要注意的是,如果多个备服务器从相同的归档路径恢复时, 需要确保在任何一个备服务器在需要之前,不能删除WAL文件。 在热备配置中,会明显的用到archive_cleanup_command (参阅第 25.2 节)。 通过%%,在命令中嵌入一个实际的%字符。

如果命令返回一个非0的退出状态,那么将写一个警告日志消息。 一个例外是,如果该命令被一个信号或该shell的一个错误 (比如命令没有找到)终止,那么将引起一个致命错误。

recovery_end_command (string)

这个参数是可选的,用于声明一个只在恢复完成时执行的SHELL命令。 recovery_end_command是为以后的复制或恢复提供一个清理机制。 %r由包含最新可用重启点的文件名代替, 如在archive_cleanup_command中的那样。

如果命令返回一个非0的退出状态,那么将写一个警告日志消息, 并且数据库将会继续启动。一个例外是,如果命令被一个信号或该shell的一个错误终止, 那么数据库不会继续启动。