pg_archivecleanup

pg_archivecleanup — 清理PostgreSQL WAL 归档文件

大纲

pg_archivecleanup [option...] archivelocation oldestkeptwalfile

简介

pg_archivecleanup被设计用作 archive_cleanup_command在作为后备服务器运行( 第 27.2 节)时来清理 WAL 文件归档。 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接受下列命令行参数:

-d

stderr上打印很多调试日志输出。

-n

stdout上打印将被移除的文件的名字(执行一次演习)。

-V
--version

打印pg_archivecleanup版本并退出。

-x extension

提供一个扩展名,在决定所有的文件 是否应该被删除之前,将从文件名中剥离这个扩展名。这通常有助于清理已经 存储期间被压缩过并且被压缩程序增加了一个扩展名的归档。例如: -x .gz

-?
--help

显示pg_archivecleanup命令行参数的帮助并退出。

环境

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

注解

在作为一个单独的工具时,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中产生调试输出

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