8.4. 日志文件维护

把数据库服务器的日志输出保存在一个地方是个好主意, 而不是仅仅把它们放到 /dev/null 里. 在碰到危险的问题的时候,日志输出是非常宝贵的.不过, 日志输出可能很庞大(特别是在比较高的调试级别上), 而且你不会无休止地保存它们.你需要"旋转"日志文件, 这样生成新的日志文件并且经常抛弃老的.

如果你简单地把 postmaster 的stderr定向到一个文件中, 那么截断日志文件的唯一的方法是停止并重起 postmaster. 这样做对于开发环境可能是可以的,但是你肯定不想在生产环境上这么干.

最简单的生产级的管理日志输出的方法就是把它们发送给 syslog,让 syslog 处理文件旋转. 要利用这个工具,确保 PostgreSQL 制作的时候打开了 --enable-syslog 选项并且把 postgresql.conf 里的 syslog 设置为 2 (只记录 syslog 日志).然后在你想强迫 syslog 守护进程 开始写入一个新日志文件的时候, 你就可以发送一个 SIGHUP 信号给它.

不过,在很多系统上,syslog 不是非常可靠,特别是在大型日志信息的情况下; 它可能在你最需要那些信息的时候截断或者丢弃它们. 你可能会觉得把 postmasterstderr 输出给某些 日志旋转脚本会更有用些.如果你用 pg_ctl 启动 postmaster,那么 postmaster 发热stderr已经重定向到 stdout,因此 你只需要一个管道命令∶

pg_ctl start | logrotate

PostgreSQL 版本并未包含合适的日志旋转程序, 但是在网上有许多不错的,比如 Apache 就带着一个.