archive_mode 是一个 配置参数,用于确定何时将已完成的 WAL 段发送到归档存储。
archive_mode 在 PostgreSQL 8.3 中添加。
用法
archive_mode 要求 wal_level 被设置为高于 minimal 的值。
archive_mode 有三种可能的设置:
off开启always(PostgreSQL 9.5 及更高版本)
当设置为 on 或 always 时,将在 archive_command 中定义的命令将被执行,以归档每个 WAL 段。
on 意味着 archive_command 将仅在主服务器上应用。
always 意味着 archive_command 将被应用,而不管服务器是主服务器还是备用服务器。
按 PostgreSQL 版本详细信息
archive_mode (PostgreSQL 19)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 允许使用 "archive_command" 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | always, on, off |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档:archive_mode
archive_mode (PostgreSQL 18)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 允许使用 "archive_command" 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | always, on, off |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档:archive_mode
archive_mode (PostgreSQL 17)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 允许使用 "archive_command" 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | always, on, off |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档:archive_mode
archive_mode (PostgreSQL 16)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 允许使用 archive_command 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | always, on, off |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档:archive_mode
archive_mode (PostgreSQL 15)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 允许使用 archive_command 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | always, on, off |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档:archive_mode
archive_mode (PostgreSQL 14)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 允许使用 archive_command 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | always, on, off |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档:archive_mode
archive_mode (PostgreSQL 13)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 允许使用 archive_command 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | always, on, off |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档:archive_mode
archive_mode (PostgreSQL 12)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 允许使用 archive_command 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | always, on, off |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档:archive_mode
archive_mode (PostgreSQL 11)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 允许使用 archive_command 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | always, on, off |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档:archive_mode
archive_mode (PostgreSQL 10)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 允许使用 archive_command 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | always, on, off |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档:archive_mode
archive_mode (PostgreSQL 9.6)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 允许使用 archive_command 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | always, on, off |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档:archive_mode
archive_mode (PostgreSQL 9.5)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 允许使用 archive_command 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | always, on, off |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档:archive_mode
archive_mode (PostgreSQL 9.4)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 允许使用 archive_command 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 |
文档:archive_mode
archive_mode (PostgreSQL 9.3)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 允许使用 archive_command 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 |
文档:archive_mode
archive_mode (PostgreSQL 9.2)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 允许使用 archive_command 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 |
文档:archive_mode
archive_mode (PostgreSQL 9.1)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 允许使用 archive_command 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 |
文档:archive_mode
archive_mode (PostgreSQL 9.0)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 允许使用 archive_command 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 |
文档:archive_mode
archive_mode (PostgreSQL 8.4)
| 设置 | off |
| 单位 | |
| 类别 | Write-Ahead Log / 设置 |
| 简短描述 | 允许使用 archive_command 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 |
文档:archive_mode
archive_mode (PostgreSQL 8.3)
| 设置 | |
| 单位 | |
| 类别 | Write-Ahead Log / 设置 |
| 简短描述 | 允许使用 archive_command 归档 WAL 文件。 |
| 扩展描述 | |
| 上下文 | postmaster |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 |
文档:archive_mode
变更历史
- PostgreSQL 9.5
- 添加了
always模式(提交 ffd37740)
- 添加了
- PostgreSQL 8.3
- 添加(提交 f18dfc48)
源代码
/* Archive modes */
typedef enum ArchiveMode
{
ARCHIVE_MODE_OFF = 0, /* disabled */
ARCHIVE_MODE_ON, /* enabled while server is running normally */
ARCHIVE_MODE_ALWAYS /* enabled always (even during recovery) */
} ArchiveMode;
extern int XLogArchiveMode;
在 src/backend/access/transam/xlog.c
/* User-settable parameters */ ... int XLogArchiveMode = ARCHIVE_MODE_OFF;
在 src/backend/utils/misc/guc.c
{
{"archive_mode", PGC_POSTMASTER, WAL_ARCHIVING,
gettext_noop("Allows archiving of WAL files using archive_command."),
NULL
},
&XLogArchiveMode,
ARCHIVE_MODE_OFF, archive_mode_options,
NULL, NULL, NULL
},
在 src/backend/postmaster/postmaster.c
if (XLogArchiveMode > ARCHIVE_MODE_OFF && wal_level == WAL_LEVEL_MINIMAL)
ereport(ERROR,
(errmsg("WAL archival cannot be enabled when wal_level is \"minimal\"")));
在 src/backend/access/transam/xlogarchive.c
/* * Create .done file forcibly to prevent the restored segment from being * archived again later. */ if (XLogArchiveMode != ARCHIVE_MODE_ALWAYS) XLogArchiveForceDone(xlogfname); else XLogArchiveNotify(xlogfname);
在 src/backend/replication/walreceiver.c
/*
* Create .done file forcibly to prevent the streamed segment from
* being archived later.
*/
XLogFileName(xlogfname, recvFileTLI, recvSegNo, wal_segment_size);
if (XLogArchiveMode != ARCHIVE_MODE_ALWAYS)
XLogArchiveForceDone(xlogfname);
else
XLogArchiveNotify(xlogfname);
参考资料
- PostgreSQL 文档: archive_mode
