archive_command 是一个 配置参数,它决定了已完成的 WAL 段如何被发送到归档存储。
archive_command 在 PostgreSQL 8.0 中被添加。
默认值
archive_command 的默认值是:'' (空字符串)
用法
为了让 archive_command 被识别,archive_mode 必须被设置为 on (PostgreSQL 9.5 及更高版本:可选 always)。
禁用WAL归档
由于 archive_mode 的更改生效需要 PostgreSQL 重启,因此临时禁用 WAL 归档的推荐方法是将 archive_command 设置为空字符串(''),这将导致命令失败。一旦设置了有效的 archive_command,归档将恢复。
如果 archive_command 被设置为一个返回零退出状态(成功)的任意命令,例如 /bin/true,那么准备归档的 WAL 文件将被删除而不会被归档。这实际上也禁用了归档,但意味着归档 WAL 文件链将出现断裂,并且除非通过其他途径归档文件,否则归档将仅在归档链断裂之前最后一个归档的文件为止是有效的。
故障处理
如果 archive_command 无法执行,PostgreSQL 将最多重试执行 3 次,每次重试之间暂停 1 秒,然后发出以下日志消息:
archiving write-ahead log file "..." failed too many times, will try again later
然后它将等待最多 60 秒,然后重新开始新的尝试。
这些值在 src/backend/postmaster/pgarch.c 中被硬编码为 NUM_ARCHIVE_RETRIES 和 PGARCH_AUTOWAKE_INTERVAL。
诊断问题
从 PostgreSQL 9.4 开始,可以使用 系统目录 视图 pg_stat_archiver 来确定 archive_command 是否正在失败。
失败的详细信息可以在 PostgreSQL 日志文件中找到,看起来会像这样:
[2019-06-10 21:51:43 UTC] node2 postgres [unknown] LOCATION: ProcessStandbyReplyMessage, walsender.c:1788
cp: cannot create regular file "/home/backup/invalid-wal-dir/000000010000000000000001": No such file or directory
[2019-06-10 21:51:44 UTC] LOG: 00000: archive command failed with exit code 1
[2019-06-10 21:51:44 UTC] DETAIL: The failed archive command was:
test ! -f /home/backup/invalid-wal-dir/000000010000000000000001 &&
cp pg_wal/000000010000000000000001 /home/backup/invalid-wal-dir/000000010000000000000001
按 PostgreSQL 版本详细信息
archive_command (PostgreSQL 19)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 归档 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
空字符串表示使用“archive_library”。 |
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:archive_command
archive_command (PostgreSQL 18)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 归档 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
空字符串表示使用“archive_library”。 |
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:archive_command
archive_command (PostgreSQL 17)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 归档 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
仅当未设置“archive_library”时才使用此选项。 |
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:archive_command
archive_command (PostgreSQL 16)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 归档 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
仅当未设置“archive_library”时才使用此选项。 |
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:archive_command
archive_command (PostgreSQL 15)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 归档 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
仅当未设置“archive_library”时才使用此选项。 |
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:archive_command
archive_command (PostgreSQL 14)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 归档 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
|
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:archive_command
archive_command (PostgreSQL 13)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 归档 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
|
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:archive_command
archive_command (PostgreSQL 12)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 归档 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
|
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:archive_command
archive_command (PostgreSQL 11)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 归档 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
|
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:archive_command
archive_command (PostgreSQL 10)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 归档 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
|
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:archive_command
archive_command (PostgreSQL 9.6)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 归档 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
|
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:archive_command
archive_command (PostgreSQL 9.5)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 归档 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
|
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
| 需要重启 |
false |
文档:archive_command
archive_command (PostgreSQL 9.4)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 归档 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
|
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
文档:archive_command
archive_command (PostgreSQL 9.3)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 归档 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
|
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
文档:archive_command
archive_command (PostgreSQL 9.2)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 归档 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
|
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
文档:archive_command
archive_command (PostgreSQL 9.1)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 归档 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
|
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
文档:archive_command
archive_command (PostgreSQL 9.0)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 归档 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
|
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
文档:archive_command
archive_command (PostgreSQL 8.4)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 设置 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
|
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
| 枚举值 |
|
| 启动值 |
|
| 重置值 |
|
| 源文件 |
|
| 源行 |
|
文档:archive_command
archive_command (PostgreSQL 8.3)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 设置 |
| 简短描述 |
设置将用于归档 WAL 文件的 shell 命令。 |
| 扩展描述 |
|
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
文档:archive_command
archive_command (PostgreSQL 8.2)
| 设置 |
|
| 单位 |
|
| 类别 |
Write-Ahead Log / 设置 |
| 简短描述 |
WAL 归档命令。 |
| 扩展描述 |
将用于归档 WAL 文件的 shell 命令。 |
| 上下文 |
sighup |
| 变量类型 |
string |
| 来源 |
默认 |
| 最小值 |
|
| 最大值 |
|
文档:archive_command
变更历史
示例
archive_command 命令反复失败时 PostgreSQL 日志输出示例
cp: cannot create regular file '/var/log/archive/000000010000000000000001': No such file or directory
[2022-05-19 18:46:53 UTC] LOG: 00000: archive command failed with exit code 1
[2022-05-19 18:46:53 UTC] DETAIL: The failed archive command was: test ! -f /var/log/archive/000000010000000000000001 && cp pg_wal/000000010000000000000001 /var/log/archive/000000010000000000000001
cp: cannot create regular file '/var/log/archive/000000010000000000000001': No such file or directory
[2022-05-19 18:46:54 UTC] LOG: 00000: archive command failed with exit code 1
[2022-05-19 18:46:54 UTC] DETAIL: The failed archive command was: test ! -f /var/log/archive/000000010000000000000001 && cp pg_wal/000000010000000000000001 /var/log/archive/000000010000000000000001
cp: cannot create regular file '/var/log/archive/000000010000000000000001': No such file or directory
[2022-05-19 18:46:55 UTC] LOG: 00000: archive command failed with exit code 1
[2022-05-19 18:46:55 UTC] DETAIL: The failed archive command was: test ! -f /var/log/archive/000000010000000000000001 && cp pg_wal/000000010000000000000001 /var/log/archive/000000010000000000000001
[2022-05-19 18:46:55 UTC] LOCATION: shell_archive_file, shell_archive.c:124
[2022-05-19 18:46:55 UTC] WARNING: 01000: archiving write-ahead log file "000000010000000000000001" failed too many times, will try again later
...
cp: cannot create regular file '/var/log/archive/000000010000000000000001': No such file or directory
[2022-05-19 18:47:53 UTC] LOG: 00000: archive command failed with exit code 1
...
请注意,成功恢复归档不会被记录。