可以postgres内部的日志循环机制删除一定时间以前的日志文件吗?

我正在使用posgtres的内部日志旋转机制。 我想要将超过30天的日志文件删除。 我如何获得postgres来做到这一点? 如果postgres不支持它,我可以设置logrotate只是删除超过30天的日志?

我目前的configuration是:

log_destination = 'stderr' logging_collector = on log_directory = 'pg_log' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' #log_truncate_on_rotation = off log_rotation_age = 1440 log_rotation_size = 0 

我不相信Postgres日志logging机制支持这个清理,但是只要不惹恼Postgres正在写入的活动日志文件,你完全可以使用logrotate或cron作业删除旧日志。

对于Postgres日志logging,我通常更喜欢login到系统日志,让正常的日志轮换过程做他们的事情。 这有几个好处,但是两个大的好处是能够像使用其他守护进程一样使用标准日志循环过程(如logrotate),并且能够让syslog守护进程将日志发送到远程主机,if这是你有一天想做的事情。

Postgres手册第23.3节讨论了其他选项(虽然简要)。

如果你不使用系统日志,那么你可以从cron运行下面的脚本,并调用它一天。

 #!/bin/sh HOME=/var/lib/pgsql export HOME PGDATA=/var/lib/pgsql/9.1/data export PGDATA /usr/bin/find $PGDATA/pg_log -type f -ctime +30 -name "*.log" -exec /bin/rm {} \; 

通过不logging到系统日志,您还可以使用像pgAdmin或pgFouine这样的工具来查看/分析数据库日志。