web-dev-qa-db-ja.com

postgresの内部ログローテーションメカニズムは、特定の時間より古いログファイルを削除できますか?

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    
9
Freiheit

Postgresのロギングメカニズムがこのクリーンアップをサポートしているとは思いませんが、Postgresが書き込んでいるアクティブなログファイルをいじらない限り、logrotateまたはcronジョブを使用して古いログを完全に安全に削除できます。

Postgresロギングの場合、私は通常、syslogにログを記録し、通常のログローテーション手順を実行することを好みます。これにはいくつかの利点がありますが、2つの大きな利点は、標準のログローテーション手順(logrotateなど)を他のデーモンと同じように使用できることと、syslogデーモンがログをリモートホストに送信できるようにすることです。それはあなたがいつかしたいことです。

他のオプションについては(簡単ではありますが)議論されています Postgresマニュアルのセクション23.3に

5
voretaq7

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などのツールを使用して、データベースログを表示/分析することもできます。

1
gsiems