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 17)
设置 |
|
单位 |
|
类别 |
预写日志/归档 |
简短描述 |
设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 |
仅当未设置 archive_library 时使用。 |
上下文 |
sighup |
变量类型 |
字符串 |
来源 |
默认 |
最小值 |
|
最大值 |
|
枚举值 |
|
引导值 |
|
重置值 |
|
源文件 |
|
源代码行 |
|
挂起重启 |
false |
文档:archive_command
archive_command (PostgreSQL 16)
设置 |
|
单位 |
|
类别 |
预写日志/归档 |
简短描述 |
设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 |
仅当未设置“archive_library”时使用。 |
上下文 |
sighup |
变量类型 |
字符串 |
来源 |
默认 |
最小值 |
|
最大值 |
|
枚举值 |
|
引导值 |
|
重置值 |
|
源文件 |
|
源代码行 |
|
挂起重启 |
false |
文档:archive_command
archive_command (PostgreSQL 15)
设置 |
|
单位 |
|
类别 |
预写日志/归档 |
简短描述 |
设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 |
仅当未设置“archive_library”时使用。 |
上下文 |
sighup |
变量类型 |
字符串 |
来源 |
默认 |
最小值 |
|
最大值 |
|
枚举值 |
|
引导值 |
|
重置值 |
|
源文件 |
|
源代码行 |
|
挂起重启 |
false |
文档:archive_command
archive_command (PostgreSQL 14)
设置 |
|
单位 |
|
类别 |
预写日志/归档 |
简短描述 |
设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
字符串 |
来源 |
默认 |
最小值 |
|
最大值 |
|
枚举值 |
|
引导值 |
|
重置值 |
|
源文件 |
|
源代码行 |
|
挂起重启 |
false |
文档:archive_command
archive_command (PostgreSQL 13)
设置 |
|
单位 |
|
类别 |
预写日志/归档 |
简短描述 |
设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
字符串 |
来源 |
默认 |
最小值 |
|
最大值 |
|
枚举值 |
|
引导值 |
|
重置值 |
|
源文件 |
|
源代码行 |
|
挂起重启 |
false |
文档:archive_command
archive_command (PostgreSQL 12)
设置 |
|
单位 |
|
类别 |
预写日志/归档 |
简短描述 |
设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
字符串 |
来源 |
默认 |
最小值 |
|
最大值 |
|
枚举值 |
|
引导值 |
|
重置值 |
|
源文件 |
|
源代码行 |
|
挂起重启 |
false |
文档:archive_command
archive_command (PostgreSQL 11)
设置 |
|
单位 |
|
类别 |
预写日志/归档 |
简短描述 |
设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
字符串 |
来源 |
默认 |
最小值 |
|
最大值 |
|
枚举值 |
|
引导值 |
|
重置值 |
|
源文件 |
|
源代码行 |
|
挂起重启 |
false |
文档:archive_command
archive_command (PostgreSQL 10)
设置 |
|
单位 |
|
类别 |
预写日志/归档 |
简短描述 |
设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
字符串 |
来源 |
默认 |
最小值 |
|
最大值 |
|
枚举值 |
|
引导值 |
|
重置值 |
|
源文件 |
|
源代码行 |
|
挂起重启 |
false |
文档:archive_command
archive_command (PostgreSQL 9.6)
设置 |
|
单位 |
|
类别 |
预写日志/归档 |
简短描述 |
设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
字符串 |
来源 |
默认 |
最小值 |
|
最大值 |
|
枚举值 |
|
引导值 |
|
重置值 |
|
源文件 |
|
源代码行 |
|
挂起重启 |
false |
文档:archive_command
archive_command (PostgreSQL 9.5)
设置 |
|
单位 |
|
类别 |
预写日志/归档 |
简短描述 |
设置将调用的 shell 命令以归档 WAL 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
字符串 |
来源 |
默认 |
最小值 |
|
最大值 |
|
枚举值 |
|
引导值 |
|
重置值 |
|
源文件 |
|
源代码行 |
|
挂起重启 |
false |
文档: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
更改历史记录
示例
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
...
请注意,不会记录归档成功恢复。