archive_command
archive_command
是一个 配置参数,它确定如何将已完成的 WAL 段发送到归档存储。
archive_command
在 PostgreSQL 8.0 中添加。
默认值
archive_command
的默认值为:''
(空字符串)
用法
archive_mode
必须设置为 on
(PostgreSQL 9.5 及更高版本:可选地为 always
)才能识别 archive_command
。
禁用 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 18)
设置 | |
单位 | |
类别 | 预写日志/归档 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | 仅当未设置“archive_library”时使用。 |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | |
重置值 | |
源文件 | |
源代码行 | |
待重启 | 否 |
文档: archive_command
archive_command (PostgreSQL 17)
设置 | |
单位 | |
类别 | 预写日志/归档 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | 仅当未设置“archive_library”时使用。 |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | |
重置值 | |
源文件 | |
源代码行 | |
待重启 | 否 |
文档: archive_command
archive_command (PostgreSQL 16)
设置 | |
单位 | |
类别 | 预写日志/归档 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | 仅当未设置“archive_library”时使用。 |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | |
重置值 | |
源文件 | |
源代码行 | |
待重启 | 否 |
文档: archive_command
archive_command (PostgreSQL 15)
设置 | |
单位 | |
类别 | 预写日志/归档 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | 仅当未设置“archive_library”时使用。 |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | |
重置值 | |
源文件 | |
源代码行 | |
待重启 | 否 |
文档: archive_command
archive_command (PostgreSQL 14)
设置 | |
单位 | |
类别 | 预写日志/归档 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | |
重置值 | |
源文件 | |
源代码行 | |
待重启 | 否 |
文档: archive_command
archive_command (PostgreSQL 13)
设置 | |
单位 | |
类别 | 预写日志/归档 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | |
重置值 | |
源文件 | |
源代码行 | |
待重启 | 否 |
文档: archive_command
archive_command (PostgreSQL 12)
设置 | |
单位 | |
类别 | 预写日志/归档 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | |
重置值 | |
源文件 | |
源代码行 | |
待重启 | 否 |
文档: archive_command
archive_command (PostgreSQL 11)
设置 | |
单位 | |
类别 | 预写日志/归档 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | |
重置值 | |
源文件 | |
源代码行 | |
待重启 | 否 |
文档: archive_command
archive_command (PostgreSQL 10)
设置 | |
单位 | |
类别 | 预写日志/归档 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | |
重置值 | |
源文件 | |
源代码行 | |
待重启 | 否 |
文档: archive_command
archive_command (PostgreSQL 9.6)
设置 | |
单位 | |
类别 | 预写日志/归档 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | |
重置值 | |
源文件 | |
源代码行 | |
待重启 | 否 |
文档: archive_command
archive_command (PostgreSQL 9.5)
设置 | |
单位 | |
类别 | 预写日志/归档 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | |
重置值 | |
源文件 | |
源代码行 | |
待重启 | 否 |
文档: archive_command
archive_command (PostgreSQL 9.4)
设置 | |
单位 | |
类别 | 预写日志/归档 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | |
重置值 | |
源文件 | |
源代码行 |
文档: archive_command
archive_command (PostgreSQL 9.3)
设置 | |
单位 | |
类别 | 预写日志/归档 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | |
重置值 | |
源文件 | |
源代码行 |
文档: archive_command
archive_command (PostgreSQL 9.2)
设置 | |
单位 | |
类别 | 预写日志/归档 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | |
重置值 | |
源文件 | |
源代码行 |
文档: archive_command
archive_command (PostgreSQL 9.1)
设置 | |
单位 | |
类别 | 预写日志/归档 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | |
重置值 | |
源文件 | |
源代码行 |
文档: archive_command
archive_command (PostgreSQL 9.0)
设置 | |
单位 | |
类别 | 预写日志/归档 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | |
重置值 | |
源文件 | |
源代码行 |
文档: archive_command
archive_command (PostgreSQL 8.4)
设置 | |
单位 | |
类别 | 预写日志/设置 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | |
启动值 | |
重置值 | |
源文件 | |
源代码行 |
文档: archive_command
archive_command (PostgreSQL 8.3)
设置 | |
单位 | |
类别 | 预写日志/设置 |
简短描述 | 设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 | |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 |
文档: archive_command
archive_command (PostgreSQL 8.2)
设置 | |
单位 | |
类别 | 预写日志/设置 |
简短描述 | WAL 归档命令。 |
额外描述 | 将调用的 shell 命令以归档 WAL 文件。 |
上下文 | sighup |
变量类型 | 字符串 |
来源 | 默认 |
最小值 | |
最大值 |
文档: archive_command
更改历史记录
- PostgreSQL 16
- 不再可以与
archive_library
同时设置(提交 d627ce3b)
- 不再可以与
- PostgreSQL 8.0
- 添加(提交 66ec2db7)
示例
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 ...
请注意,不会记录归档的成功恢复。
参考文献
- PostgreSQL 文档: archive_command