Posgtresの内部ログローテーションメカニズムを使用しています。 30日以上経過したログファイルを削除してください。 postgresでこれを行うにはどうすればよいですか? postgresがサポートしていない場合、30日より古いログのみを削除するようにlogrotateを設定できますか?
私の現在の設定は:
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のロギングメカニズムがこのクリーンアップをサポートしているとは思いませんが、Postgresが書き込んでいるアクティブなログファイルをいじらない限り、logrotateまたはcronジョブを使用して古いログを完全に安全に削除できます。
Postgresロギングの場合、私は通常、syslogにログを記録し、通常のログローテーション手順を実行することを好みます。これにはいくつかの利点がありますが、2つの大きな利点は、標準のログローテーション手順(logrotateなど)を他のデーモンと同じように使用できることと、syslogデーモンがログをリモートホストに送信できるようにすることです。それはあなたがいつかしたいことです。
他のオプションについては(簡単ではありますが)議論されています Postgresマニュアルのセクション23.3に 。
Syslogを使用していない場合は、cronから次のスクリプトを実行して、1日で呼び出すことができます。
#!/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 {} \;
Syslogにログを記録しないことにより、pgAdminやpgFouineなどのツールを使用して、データベースログを表示/分析することもできます。