【发布时间】:2013-08-01 02:40:46
【问题描述】:
对于 postgres,
我使用“pg_dump”转储数据库,然后使用“psql”在其他服务器上恢复数据库。我发现在 pg_xlog/ 创建了大量的 WAL 日志,这消耗了大量的磁盘空间。
postgres 有没有办法自动压缩这些 WAL 日志?
我在 postgres 手册中看到了“archive_command”设置。方向正确吗?
杨
【问题讨论】:
标签: postgresql-9.1 wal
对于 postgres,
我使用“pg_dump”转储数据库,然后使用“psql”在其他服务器上恢复数据库。我发现在 pg_xlog/ 创建了大量的 WAL 日志,这消耗了大量的磁盘空间。
postgres 有没有办法自动压缩这些 WAL 日志?
我在 postgres 手册中看到了“archive_command”设置。方向正确吗?
杨
【问题讨论】:
标签: postgresql-9.1 wal
是的,archive_command 是您要查找的指令。来自the manual:
archive_command (string)用来归档一个完整的 WAL 文件段的 shell 命令。 字符串中的任何 %p 都被替换为文件的路径名 存档,并且任何 %f 仅替换为文件名。 (路径名 相对于服务器的工作目录,即 集群的数据目录。)使用 %% 将实际的 % 字符嵌入 命令。命令返回零退出很重要 仅在成功时的状态。有关详细信息,请参阅第 24.3.1 节。
这个参数只能在 postgresql.conf 文件或者 服务器命令行。除非 archive_mode 在 服务器启动。如果archive_command 是一个空字符串(默认) 启用 archive_mode 时,暂时禁用 WAL 归档, 但服务器继续在 期望很快会提供命令。环境 archive_command 到一个除了返回 true 什么都不做的命令,例如 /bin/true(Windows 上的 REM),有效地禁用归档,但也 破坏了归档恢复所需的 WAL 文件链,因此它 只应在不寻常的情况下使用。
Postgres wiki 有一个例子:
# Enable WAL archiving on the primary to an archive directory accessible from
# the standby. If wal_keep_segments is a high enough number to retain the WAL
# segments required for the standby server, this is not necessary.
archive_mode = on
archive_command = 'cp %p /path_to/archive/%f'
【讨论】: