Dapatkah mekanisme rotasi log internal postgres menghapus file log yang lebih lama dari waktu tertentu?

9

Saya menggunakan mekanisme rotasi log internal posgtres. Saya ingin mencatat file yang lebih lama dari 30 hari untuk dihapus. Bagaimana cara saya mendapatkan postgres untuk melakukan ini? Jika postgres tidak mendukungnya, dapatkah saya mengatur logrotate hanya menghapus log yang lebih dari 30 hari?

Konfigurasi saya saat ini adalah:

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

Jawaban:

5

Saya tidak percaya mekanisme logging Postgres mendukung pembersihan ini, tetapi Anda benar-benar aman menghapus log lama menggunakan logrotate atau pekerjaan cron selama Anda tidak mengacaukan logfile aktif yang ditulis Postgres.

Untuk logging Postgres, saya biasanya lebih suka log ke syslog dan biarkan prosedur rotasi log normal melakukan hal mereka. Ini memiliki beberapa keuntungan, tetapi dua yang besar adalah kemampuan untuk menggunakan prosedur rotasi log standar Anda (seperti logrotate) dengan cara yang sama Anda lakukan untuk daemon lain dan kemampuan untuk membuat daemon syslog Anda mengirim log ke host jarak jauh, jika itu sesuatu yang ingin kamu lakukan suatu hari.

Pilihan lain dibahas (walaupun singkat) di bagian 23.3 dari manual Postgres .

voretaq7
sumber
1

Jika Anda tidak menggunakan syslog maka Anda bisa menjalankan skrip berikut dari cron dan menyebutnya sehari.

#!/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 {} \;

Dengan tidak masuk ke syslog Anda juga dapat menggunakan alat seperti pgAdmin atau pgFouine untuk melihat / menganalisis log basis data.

gsiems
sumber
pgFouine yang menuntun saya ke jalan ini. Anda dapat menggunakan pgFouine dari log syslog tetapi lebih banyak pekerjaan untuk mengaturnya dengan benar.
Freiheit