pg_archivecleanup被设计为后备服务器(见Section 25.2)运行时用来清理 WAL 文件归档的 archive_cleanup_command。pg_archivecleanup也可以被用作一个独立程序来清理 WAL 文件归档。
要配置一个后备服务器使用pg_archivecleanup,把下面的配置放在recovery.conf配置文件中:
archive_cleanup_command = 'pg_archivecleanup archivelocation %r'
其中archivelocation是应该被移除的 WAL 段文件的目录。
当用于archive_cleanup_command时,所有以%r参数的值开头的 WAL 文件将被从archivelocation移除。这将使需要被保留的文件数最小化,并且还能保留崩溃重启的能力。如果archivelocation是一个短暂的集结待命区,使用这个参数是合适的。但是当archivelocation是作为一个长期的 WAL 归档区域时,或者多个后备服务器都从同一个归档位置恢复时,使用这个参数就不合适了。
当用作一个独立程序时,所有以oldestkeptwalfile开头的 WAL 文件都将从archivelocation中移除。在这种模式中,如果你指定了一个.backup文件名,那么只有文件前缀被用作oldestkeptwalfile。这允许你移除先于一个特定基础备份被归档的所有 WAL 文件而不出错。例如,下面的例子将移除所有比名为000000010000003700000010的 WAL 文件老的文件:
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接受下列命令行参数:
在stderr上打印很多调试日志输出。
在stdout上打印可能会被移除的文件的名称(执行一次空运行)。
打印pg_archivecleanup版本并退出。
当把这个程序用作一个独立工具时,提供一个在判断文件是否应被删除前要从所有文件名中剥离的扩展。这通常对清理在存储期间被压缩过的归档(并且因此会被压缩程序加上一个扩展)有用。例如: -x .gz。
注意传递给程序的.backup文件名不应包括扩展。
显示有关pg_archivecleanup的命令行参数并且退出。
当作为一个独立工具使用时,pg_archivecleanup被设计为可以与PostgreSQL 8.0 及以后的版本一起工作。但是当被用作一个归档清理命令时,它只能和PostgreSQL 9.0 及以后的版本一起工作。
pg_archivecleanup是用 C 编写而成并且有一份很容易修改的源代码,你可以根据自己的需要修改其中特别设计的小节。