PostgreSQL的 archive_mode 参数配置示例详解

 更新时间:2025年11月28日 09:51:06   作者:文牧之  
本文详细介绍了PostgreSQL的archive_mode参数,包括其三个选项(off、on、always)的对比和使用场景,以及在不同模式下的配置和行为特点,感兴趣的朋友跟随小编一起看看吧

PostgreSQL的 archive_mode 参数详解

一 archive_mode 参数概述

1.1. 基本定义

-- archive_mode 控制是否启用 WAL 归档
archive_mode = on|off|always

1.2. 三个选项的对比

选项描述使用场景重启要求
off禁用归档开发/测试环境不需要
on启用归档生产环境、主节点需要重启
always总是归档备用服务器、所有节点需要重启

二 off 模式

2.1. 配置和特性

archive_mode = off

2.2. 行为特点

-- 禁用 WAL 归档
- 不执行 archive_command
- 不保留归档的 WAL 文件
- 只能进行完整备份,不能进行 PITR
- 节省磁盘空间和 I/O 开销

2.3. 使用场景

# 适用于:
# - 开发/测试环境
# - 不需要时间点恢复的环境
# - 磁盘空间有限的场景
# - 临时数据库
# 配置示例
echo "archive_mode = off" >> /var/lib/postgresql/14/main/postgresql.conf

三 on 模式

3.1. 配置和特性

archive_mode = on

3.2. 行为特点

-- 启用 WAL 归档
- 执行 archive_command 归档完成的 WAL 文件
- 支持时间点恢复 (PITR)
- 支持基于 WAL 的备份策略
- 在主服务器上正常工作
- 在备用服务器上不归档

3.3. 必需的相关配置

# postgresql.conf - on 模式配置
archive_mode = on
wal_level = replica                    # 必须为 replica 或 logical
archive_command = 'cp %p /archive/%f'  # 必须设置归档命令
# 可选配置
archive_timeout = 300                  # 归档超时(秒)

3.4. 使用场景

# 适用于:
# - 生产环境主节点
# - 需要时间点恢复的环境
# - 基于 WAL 的备份策略
# - 高可用集群的主节点

四 always 模式

4.1. 配置和特性

archive_mode = always

4.2. 行为特点

-- 总是启用 WAL 归档
- 在主服务器和备用服务器上都执行归档
- 备用服务器也归档其接收的 WAL
- 支持级联复制环境中的归档
- 增加备用服务器的 I/O 负载

4.3. 必需的相关配置

# postgresql.conf - always 模式配置
archive_mode = always
wal_level = replica                    # 必须为 replica 或 logical
archive_command = 'cp %p /archive/%f'  # 必须设置归档命令
# 在备用服务器上还需要
hot_standby = on

4.4. 使用场景

# 适用于:
# - 级联复制环境
# - 所有节点都需要归档的集群
# - 备用服务器也需要 PITR 能力的环境
# - 多层级备份架构

五 配置验证和检查

5.1. 检查当前 archive_mode

-- 查看当前 archive_mode 设置
SELECT name, setting, unit, context, pending_restart
FROM pg_settings 
WHERE name = 'archive_mode';
     name     | setting | unit |  context   | pending_restart 
--------------+---------+------+------------+-----------------
 archive_mode | on      |      | postmaster | f
(1 row)
-- 检查归档相关参数
SELECT name, setting, pending_restart
FROM pg_settings 
WHERE name IN ('archive_mode', 'wal_level', 'archive_command', 'archive_timeout');

5.2. 验证归档状态

-- 检查归档统计信息
SELECT * FROM pg_stat_archiver;
-- 输出示例:
 archived_count |    last_archived_wal     |      last_archived_time       | failed_count | last_failed_wal | last_failed_time |          stats_reset  
----------------+--------------------------+-------------------------------+--------------+-----------------+------------------+-----------------------
--------
            451 | 0000000100000001000000D9 | 2025-11-27 17:49:22.393339+08 |            0 |                 |                  | 2025-11-25 09:03:40.58
2174+08
(1 row)
-- 检查未归档的 WAL 文件
SELECT count(*) as pending_archive 
FROM pg_ls_archive_statusdir() 
WHERE name LIKE '%.ready';

六 配置示例

6.1. 开发环境配置

# 开发环境 - 禁用归档
archive_mode = off
wal_level = minimal
archive_command = ''

6.2. 生产主节点配置

# 生产主节点 - 启用归档
archive_mode = on
wal_level = replica
archive_command = 'test ! -f /var/lib/postgresql/wal_archive/%f && cp %p /var/lib/postgresql/wal_archive/%f'
archive_timeout = 300
max_wal_senders = 10

6.3. 级联复制备用节点配置

# 备用节点 - 总是归档
archive_mode = always
wal_level = replica
archive_command = 'test ! -f /var/lib/postgresql/wal_archive/%f && cp %p /var/lib/postgresql/wal_archive/%f'
archive_timeout = 300
hot_standby = on
max_wal_senders = 5

6.4. 高可用集群配置

# 主节点配置
archive_mode = on
wal_level = replica
archive_command = 'rsync -av %p backup-server:/wal_archive/%f'
# 备用节点配置 (可能升级为主节点)
archive_mode = always
wal_level = replica
archive_command = 'rsync -av %p backup-server:/wal_archive/%f'
hot_standby = on

七 修改 archive_mode

7.1. 修改步骤

# 1. 修改 postgresql.conf
echo "archive_mode = on" >> /var/lib/postgresql/14/main/postgresql.conf
# 2. 设置归档命令(如果启用归档)
echo "archive_command = 'cp %p /archive/%f'" >> /var/lib/postgresql/14/main/postgresql.conf
# 3. 确保 wal_level 正确
echo "wal_level = replica" >> /var/lib/postgresql/14/main/postgresql.conf
# 4. 重启 PostgreSQL(从 off 到 on/always 需要重启)
systemctl restart postgresql
# 5. 验证修改
psql -c "SELECT name, setting FROM pg_settings WHERE name = 'archive_mode';"

7.2. 修改注意事项

-- 重要提醒:
-- 1. 从 off 切换到 on/always 需要重启 PostgreSQL
-- 2. 从 on/always 切换到 off 需要重启 PostgreSQL
-- 3. 启用归档必须设置有效的 archive_command
-- 4. 启用归档要求 wal_level = replica 或 logical
-- 5. 确保归档目录存在且有正确权限

-- 检查是否需要重启
SELECT name, setting, pending_restart 
FROM pg_settings 
WHERE name = 'archive_mode' AND pending_restart;

到此这篇关于PostgreSQL的 archive_mode 参数详解的文章就介绍到这了,更多相关postgresql archive_mode 参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PostgreSQL中设置和管理数据库索引的操作指南

    PostgreSQL中设置和管理数据库索引的操作指南

    索引是数据库管理系统中的一个重要特性,能够显著提高查询性能,PostgreSQL 作为一个强大的开源关系数据库管理系统,提供了多种类型的索引结构,以满足不同的需求,本文将详细介绍 PostgreSQL 中如何设置和管理索引,需要的朋友可以参考下
    2025-06-06
  • PostgreSQL的应用技巧和示例分享

    PostgreSQL的应用技巧和示例分享

    本文会总结一些Postgres中,从应用需求和场景出发,不太常见,但比较常用并且有用的SQL语句,文中的示例代码简洁易懂,需要的小伙伴可以收藏一下
    2023-06-06
  • PostgreSQL拆分字符串的三种方式

    PostgreSQL拆分字符串的三种方式

    这篇文章给大家介绍了PostgreSQL拆分字符串的三种方式,字符串转为数组,字符串转为列表和字符串转为数据项,并通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • PostgreSQL之分区表(partitioning)

    PostgreSQL之分区表(partitioning)

    通过合理的设计,可以将选择一定的规则,将大表切分多个不重不漏的子表,这就是传说中的partitioning。比如,我们可以按时间切分,每天一张子表,比如我们可以按照某其他字段分割,总之了就是化整为零,提高查询的效能
    2016-11-11
  • PostgreSQL中调用存储过程并返回数据集实例

    PostgreSQL中调用存储过程并返回数据集实例

    这篇文章主要介绍了PostgreSQL中调用存储过程并返回数据集实例,本文给出一创建数据表、插入测试数据、创建存储过程、调用创建存储过程和运行效果完整例子,需要的朋友可以参考下
    2015-01-01
  • PostgreSQL数据库储存空间不足的解决方案

    PostgreSQL数据库储存空间不足的解决方案

    在使用 PostgreSQL 数据库时,可能会遇到存储空间不足的问题,这个问题不仅会影响数据库的正常运行,还可能导致数据丢失或应用程序出现故障,因此,了解如何应对这种情况至关重要,所以本文给大家就介绍了PostgreSQL数据库储存空间不足的解决方案,需要的朋友可以参考下
    2024-07-07
  • postgres 实现查询某条数据的排名

    postgres 实现查询某条数据的排名

    这篇文章主要介绍了postgres 实现查询某条数据的排名,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • PostgreSQL pg_archivecleanup与清理archivelog的操作

    PostgreSQL pg_archivecleanup与清理archivelog的操作

    这篇文章主要介绍了PostgreSQL pg_archivecleanup与清理archivelog的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 解决sqoop import 导入到hive后数据量变多的问题

    解决sqoop import 导入到hive后数据量变多的问题

    这篇文章主要介绍了解决sqoop import 导入到hive后数据量变多的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • PostgreSQL实现透视表查询的方法详解

    PostgreSQL实现透视表查询的方法详解

    PostgreSQL 8.3版本发布时,引入了一个名为tablefunc的新扩展,这个扩展提供了一组非常有趣的函数,其中之一是交叉表函数,用于创建数据透视表,这就是我们将在本文中讨论的内容,本文给大家介绍了PostgreSQL实现透视表查询的方法,需要的朋友可以参考下
    2024-12-12

最新评论