9.3 9.4 9.5 9.6 10 11 12 13
阿里云PostgreSQL 问题报告 纠错本页面

pg_archivecleanup

名称

pg_archivecleanup -- 清理PostgreSQL WAL 归档文件

大纲

pg_archivecleanup [option...] archivelocation oldestkeptwalfile

描述

pg_archivecleanup被设计为后备服务器(见第 25.2 节) 运行时用来清理 WAL 文件归档的 archive_cleanup_commandpg_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中移除。在这种模式中, 如果你指定了一个.partial.backup文件名, 那么只有文件前缀被用作oldestkeptwalfile。 这样处理.backup文件名允许你移除先于一个特定基础备份被归档的所有 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接受下列命令行参数:

-d

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

-n

stdout上打印可能会被移除的文件的名称(执行一次空运行)。

-V
--version

打印pg_archivecleanup版本并退出。

-x extension

当把这个程序用作一个独立工具时, 提供一个在判断文件是否应被删除前要从所有文件名中剥离的扩展。 这通常对清理在存储期间被压缩过的归档(并且因此会被压缩程序加上一个扩展) 有用。例如:-x.gz

-?
--help

显示有关pg_archivecleanup命令行参数的帮助信息并且退出。

注意

当作为一个独立工具使用时,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 访问它,但是文件是后备服务器本地的。这将:

又见

pg_standby
<
/BODY >