8.4. ログファイルの保守

データベースサーバのログ出力を /dev/null に渡してしまうのではなく、どこかに保存しておくことを推奨します。問題の原因を究明する時にログ出力は貴重です。しかし、ログ出力は (特により高いデバッグレベルの時に) 巨大になりがちですので、際限なく保存したくはないでしょう。新しいログファイルを開始させ、古いログファイルを捨ててしまうために、度々ログファイルを "回転" させる必要があります。

単に postmaster の stderr をファイルに落しているのであれば、ログファイルを切り詰める方法は、postmaster を停止し、再度起動することだけです。これは、開発段階では問題ありませんが、実運用のサーバではこの方法で動作させないでしょう。

実運用レベルの最も簡単なログ出力の管理方法は、syslog に全てを送信し、syslog にファイルの回転を行なわせることです。このためには、postgresql.conf 内で syslog を 2 (syslog にのみログを出力) に設定して下さい。そして、新しいログファイルへの書き込みを始めたい時に、syslog デーモンに SIGHUPを送信して下さい。

しかし、多くのシステムでは、特に巨大なログメッセージでは syslog はあまり信頼できません。必要なメッセージを切り詰めてしまったり、破棄してしまったりする可能性があります。 postmasterstderr を何らかのログ回転スクリプトにパイプで渡す方が、より便利であると考えるかも知れません。pg_ctl を使ってpostmaster を起動する場合、その postmaster の stderr はすでにstdoutにリダイレクトされています。 ですので、単にパイプコマンドを以下のように使用する必要があります。

pg_ctl start | logrotate

PostgreSQL 配布物には、適したログ回転プログラムは含まれていませんが、例えば、Apache の配布物に含まれているものなど、ネット上には多くのものがあります。