PostgreSQL pg_archivecleanup
pg_archivecleanup — 清理PostgreSQL WAL 归档文件
大纲
pg_archivecleanup
[option
...] archivelocation
oldestkeptwalfile
简介
pg_archivecleanup被设计用作 archive_cleanup_command
在作为后备服务器运行( 第 26.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
, 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
中产生调试输出 -
从归档目录中移除不再需要的文件