PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

pg_archivecleanup

pg_archivecleanup — 清理 PostgreSQL WAL 归档文件

Synopsis

pg_archivecleanup [option...] archivelocation oldestkeptwalfile

描述

pg_archivecleanup 被设计为用作 archive_cleanup_command,以便在作为后备服务器运行时清理 WAL 文件归档(参见 Section 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

同时移除备份历史文件。有关备份历史文件的详情,请参阅 Section 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 指定是否在诊断消息中使用颜色。可能的值是 always、auto 和 never。

注记

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 中产生调试输出

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