如何阻止PostgreSQL在指定日志文件中记录所有事件与查询?
一、检查可能覆盖主配置的文件/参数
PostgreSQL的配置优先级顺序为:命令行参数 > postgresql.auto.conf > 主配置postgresql.conf > include_dir下的额外配置文件,按此顺序排查:
检查
postgresql.auto.conf文件
这个文件由ALTER SYSTEM命令生成,优先级高于主配置,会直接覆盖postgresql.conf的设置。查看内容:cat /etc/postgresql/12/main/postgresql.auto.conf如果里面存在
log_statement、log_connections等日志相关配置,大概率是导致日志膨胀的原因。检查
conf.d目录下的额外配置
Ubuntu默认的PostgreSQL主配置会包含/etc/postgresql/12/main/conf.d/目录下的所有.conf文件,这些文件的设置会覆盖主配置。列出目录内容:ls /etc/postgresql/12/main/conf.d/逐个查看这些文件,确认是否有开启日志的配置项(比如
log_statement = 'all'、log_connections = on)。检查PostgreSQL启动命令行参数
启动时通过-c指定的参数优先级最高,会覆盖所有配置文件。查看当前postgres进程的启动参数:ps aux | grep postgres观察主进程命令行是否有类似
-c log_statement=all的参数。也可以检查systemd服务文件:cat /lib/systemd/system/postgresql@.service查看
ExecStart行是否包含日志相关的-c参数。确认当前使用的配置文件
确保你修改的是PostgreSQL实际加载的配置文件:psql -c 'SHOW config_file;'
二、PostgreSQL内部检查与修改指令
无需重启数据库,直接在psql中检查和调整生效配置:
查看当前所有生效的日志参数
执行以下SQL,列出所有日志相关的生效配置,重点关注log_statement、log_connections、log_disconnections、log_min_messages、log_min_error_statement这些项:SHOW ALL LIKE 'log_%';比如
log_connections = on会记录所有连接事件,哪怕log_statement = 'none',也会导致日志持续增长。临时修改配置(重启后失效)
如果发现参数不符合预期,可在psql中临时调整,立即生效:-- 关闭语句日志 SET log_statement = 'none'; -- 关闭连接/断开日志 SET log_connections = off; SET log_disconnections = off; -- 仅记录panic级别的错误(谨慎使用,会丢失重要错误信息) SET log_min_messages = 'panic';永久修改配置(重启后生效)
使用ALTER SYSTEM命令修改,会自动写入postgresql.auto.conf,之后重载配置无需重启:ALTER SYSTEM SET log_statement = 'none'; ALTER SYSTEM SET log_connections = off; ALTER SYSTEM SET log_disconnections = off; -- 重载配置 SELECT pg_reload_conf();
三、额外提示
即使把所有日志参数调到最低,PostgreSQL仍会记录关键系统事件(如数据库启动/关闭、严重错误),这属于正常情况。如果logrotate负载依旧过高,可以调整logrotate配置(比如增加轮转频率、调整压缩级别),或者让PostgreSQL通过log_rotation_age、log_rotation_size参数自动按大小/时间分割日志,降低logrotate的压力。
内容的提问来源于stack exchange,提问作者Nec

