Ubuntu中PostgreSQL日志管理方法
一 日志位置与快速查看
sudo tail -f /var/log/postgresql/postgresql-<version>-main.logsudo journalctl -u postgresql.service -fsudo -u postgres psql -c "show config_file;" 与 show data_directory; 在数据库中查询实际路径。二 启用与配置日志收集
sudo nano /etc/postgresql/<version>/main/postgresql.conflogging_collector = onlog_directory = 'pg_log'log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'log_rotation_age = 1dlog_rotation_size = 100MBlog_truncate_on_rotation = offlog_min_messages = infolog_line_prefix = '%m %p %u %d %r'log_min_duration_statement = 60(单位秒)log_connections = on,log_disconnections = onlog_checkpoints = onlog_duration = onlog_lock_waits = onlog_statement = 'ddl'(或 'mod'、'all')sudo systemctl restart postgresqlsudo -u postgres psql -c "show logging_collector; show log_directory; show log_filename;"。三 日志轮转与保留策略
log_rotation_age 与 log_rotation_size 控制按时间或按大小切分日志,避免单个文件过大。sudo crontab -e -u postgres0 1 * * * find /var/lib/postgresql/12/main/pg_log -type f \( -name '*.log' -o -name '*.csv' \) -mtime +7 -exec rm {} \; >/dev/null 2>&1crontab -l -u postgres四 常见问题与排查
logging_collector = on,并检查 log_directory 与 log_filename 是否指向正确目录与命名规则;重启后到目标目录查看新文件。ls -ld /var/log/postgresql /var/lib/postgresql/<version>/main/pg_log 检查。log_rotation_size 与 log_rotation_age,并配置定时清理;必要时降低 log_min_messages 与 log_statement 的详细程度以减少日志量。log_min_duration_statement 与 log_statement,并配合 log_line_prefix 输出时间、进程、用户、数据库、来源地址等,便于检索与审计。