archive_command

确定如何归档已完成 WAL 段的配置参数

archive_command 是一个 配置参数,它确定如何将已完成的 WAL 段发送到归档存储。

archive_commandPostgreSQL 8.0 中添加。

默认值

archive_command 的默认值为:''(空字符串)

用法

archive_mode 必须设置为 onPostgreSQL 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_RETRIESPGARCH_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
...

请注意,不会记录归档成功恢复。

分类

GUC 配置项复制存储

另请参阅

archive_modearchive_timeoutpg_stat_archiverrestore_commandarchive_library

反馈

提交关于“archive_command”的任何评论、建议或更正 此处