2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0

pg_archivecleanup

pg_archivecleanup — 清理 PostgreSQL WAL 归档文件

概要

pg_archivecleanup [选项...] archivelocation oldestkeptwalfile

描述

pg_archivecleanup 设计用于作为 archive_cleanup_command 来清理 WAL 文件归档,特别是在作为备用服务器运行时(参见 第 26.2 节)。pg_archivecleanup 也可以作为独立程序来清理 WAL 文件归档。

要配置备用服务器使用 pg_archivecleanup,请将其添加到其 postgresql.conf 配置文件中:

archive_cleanup_command = 'pg_archivecleanup archivelocation %r'

其中 archivelocation 是应从中删除 WAL 段文件的目录。

当在 archive_cleanup_command 中使用时,所有逻辑上先于 %r 参数值的 WAL 文件都将从 archivelocation 中删除。这最小化了需要保留的文件数量,同时保持了崩溃恢复能力。如果 archivelocation 是此特定备用服务器的临时暂存区域,则使用此参数是合适的,但如果 archivelocation 被用作长期 WAL 归档区域,或者多个备用服务器从同一归档位置恢复,则不应使用。

当作为独立程序使用时,所有逻辑上先于 oldestkeptwalfile 的 WAL 文件都将从 archivelocation 中删除。在此模式下,如果您指定了 .partial.backup 文件名,则只有文件前缀将用作 oldestkeptwalfile。对 .backup 文件名的这种处理允许您在没有错误的情况下删除在特定基础备份之前归档的所有 WAL 文件。例如,以下示例将删除所有比 WAL 文件名 000000010000003700000010 旧的文件:

pg_archivecleanup -d archive 000000010000003700000010.00000020.backup

pg_archivecleanup:  keep WAL file "archive/000000010000003700000010" and later
pg_archivecleanup:  removing file "archive/00000001000000370000000F"
pg_archivecleanup:  removing file "archive/00000001000000370000000E"

pg_archivecleanup 假定 archivelocation 是服务器拥有用户可读写目录。

选项

pg_archivecleanup 接受以下命令行参数:

-b
--clean-backup-history

同时删除备份历史文件。有关备份历史文件的详细信息,请参见 第 25.3.2 节

-d
--debug

stderr 上打印大量调试日志输出。

-n
--dry-run

stdout 上打印将要删除的文件名(执行模拟运行)。

-V
--version

打印 pg_archivecleanup 版本并退出。

-x extension
--strip-extension=extension

提供一个扩展名,它将在决定是否删除文件之前从所有文件名中剥离。这对于清理在存储过程中被压缩的归档文件通常很有用,因为压缩程序会添加扩展名。例如:-x .gz

-?
--help

显示关于 pg_archivecleanup 命令行参数的帮助,然后退出。

环境变量

环境变量 PG_COLOR 指定是否在诊断消息中使用颜色。可能的值为 alwaysautonever

注释

pg_archivecleanup 设计用于与 PostgreSQL 8.0 及更高版本(作为独立实用程序使用时),或与 PostgreSQL 9.0 及更高版本(作为归档清理命令使用时)配合使用。

pg_archivecleanup 是用 C 编写的,源代码易于修改,并专门指定了需要修改的部分以满足您的特定需求。

示例

在 Linux 或 Unix 系统上,您可能会使用:

archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2>>cleanup.log'

其中归档目录物理上位于备用服务器上,以便 archive_command 通过 NFS 访问它,但文件位于备用服务器本地。这将:

  • cleanup.log 中产生调试输出

  • 从归档目录中删除不再需要的文件

提交更正

如果您在文档中发现任何不正确、与您对特定功能的实际体验不符或需要进一步说明的内容,请使用 此表单 报告文档问题。