27.1. 存档恢复设置

  • restore_command ( string )
    • 执行以检索 WAL 文件系列的已归档段的本地 shell 命令。此参数对于存档恢复是必需的,而对于流复制则是可选的。字符串中的任何%f替换为要从归档中检索的文件名,而任何%p替换为服务器上的复制目标路径名。 (路径名相对于当前工作目录,即集群的数据目录.)%r替换为包含最后一个有效重启点的文件名。那是必须保留的最早的文件,以使还原可重新启动,因此该信息可用于将归档文件截断为仅支持从当前还原重新启动所需的最小值。 %r通常仅由热备份配置使用(请参阅Section 26.2)。写入%%以嵌入实际的%字符。

重要的是,只有成功执行命令,命令才返回零退出状态。 要求命令提供 Files 中不存在的文件名;要求时,它必须返回非零。例子:

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

exception 是,如果命令被 signal 终止(SIGTERM 除外,SIGTERM 用作数据库服务器关闭的一部分)或 Shell 程序出错(例如未找到命令),则恢复将中止,服务器将终止无法启动。

  • archive_cleanup_command ( string )
    • 此可选参数指定将在每个重新启动点执行的 shell 命令。 archive_cleanup_command的目的是提供一种机制来清理备用服务器不再需要的旧的已归档 WAL 文件。任何%r都将替换为包含最后一个有效重启点的文件名。这是必须保留的最早的文件,以使恢复可重新启动,因此可以安全删除%r之前的所有文件。此信息可用于将归档文件截断为仅支持从当前还原中重新启动所需的最小值。 pg_archivecleanup模块通常在archive_cleanup_command中用于单待机配置,例如:
archive_cleanup_command = 'pg_archivecleanup /mnt/server/archivedir %r'

但是请注意,如果多个备用服务器正在从同一个存档目录中还原,则需要确保在所有服务器不再需要它们之前,不要删除 WAL 文件。 archive_cleanup_command通常用于热备份配置中(请参见Section 26.2)。写入%%以在命令中嵌入实际的%字符。

如果命令返回非零退出状态,那么将写入警告日志消息。一个 exception 是,如果命令被 signal 终止或 Shell 程序出错(例如找不到命令),则会引发致命错误。

  • recovery_end_command ( string )
    • 此参数指定将仅在恢复结束时执行一次的 Shell 命令。此参数是可选的。 recovery_end_command的目的是提供一种在复制或恢复后进行清理的机制。任何%r都将替换为包含最后一个有效重启点的文件名,例如archive_cleanup_command

如果该命令返回非零退出状态,那么将写入警告日志消息,并且无论如何数据库将 continue 启动。exception 是,如果命令被 signal 终止或 Shell 程序出错(例如未找到命令),则数据库将无法 continue 启动。