archive_mode (enum)
当启用archive_mode时,可以通过设置archive_command命令将完成的 WAL段发送到归档存储。 除了off,要禁用两种模式on和 always。在正常操作过程中,两种模式没有区别,但是 当设置为always时,归档恢复或者待机模式中激活WAL归档。 在always模式中, 从归档中恢复所有文件或者再次归档使用流复制传输的文件。archive_mode和archive_command 是独立的变量,这样可以在不影响归档模式的前提下修改 archive_command。这个参数只能在服务器启动时设置。 当wal_level被设置为minimal时, archive_mode不能被启用。
archive_command (string)
本地shell 命令被执行来归档一个完成的 WAL 文件段。字符串中的任何%p被替换成要被归档的文件的路径名, 而%f只被文件名替换(路径名是相对于服务器的工作目录, 即集簇的数据目录)。如果要在命令里嵌入一个真正的%字符,可以使用%%。有一点很重要,该命令只在成功时返回一个零作为退出状态。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。除非服务器启动时启用了archive_mode,否则它会被忽略。如果archive_mode被启用时,archive_command是一个空字符串(默认),WAL 归档会被临时禁用,但服务器仍会继续累计 WAL 段文件,期待着一个命令被提供。将archive_command设置为一个只返回真但不做任何事的命令(例如/bin/true或 Windows 上的REM)实际上会禁用归档,也会打破归档恢复所需的 WAL 文件链,因此只有在极少数情况下才能用。
archive_timeout (integer)
archive_command仅在已完成的 WAL 段上调用。因此,如果你的服务器只产生很少的 WAL 流量(或产生流量的周期很长),那么在事务完成和它被安全地记录到归档存储之间将有一个很长的延迟。为了限制未归档数据存在的时间,你可以设置archive_timeout来强制服务器来周期性地切换到一个新的 WAL 段文件。当这个参数被设置为大于零时,只要从上次段文件切换后过了参数所设置的那么多秒并且已经有过任何数据库活动,包括一个单一检查点(如果没有数据库活动则跳过检查点),服务器将切换到一个新的段文件。注意,由于强制切换而提早关闭的被归档文件仍然与完整的归档文件长度相同。因此,使用非常短的archive_timeout是不明智的 — 它将占用巨大的归档存储。一分钟左右的archive_timeout设置通常比较合理。如果你希望数据能被更快地从主服务器上复制下来,你应该考虑使用流复制而不是归档。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。