如何阻止PostgreSQL日志记录pgAdmin4生成的不必要内部查询
PostgreSQL过滤pgAdmin4监控查询日志配置方案
适用场景
你可以根据自己的PostgreSQL版本、部署方式选择下列任意一种方案,都可以实现仅记录业务查询、过滤pgAdmin4生成的监控日志的需求:
方案1:按用户过滤(全版本兼容,推荐优先使用)
如果pgAdmin4连接数据库使用独立的监控账号(和业务应用账号分离),直接修改postgresql.conf添加如下配置:
# 替换单引号内的内容为pgAdmin实际连接使用的用户名 log_exclude_users = 'pgadmin_user'
该配置会直接过滤指定用户的所有操作日志,不会影响其他业务用户的日志记录。
如果不愿意修改全局配置,也可以直接执行SQL修改用户级别的日志配置,无需修改配置文件:
-- 替换pgadmin_user为实际的pgAdmin连接用户名 ALTER ROLE pgadmin_user SET log_statement = 'none';
方案2:按应用名称过滤(PostgreSQL 12及以上版本支持)
pgAdmin4连接数据库时默认会设置application_name为pgAdmin 4,你可以先执行如下SQL确认实际的应用名:
SELECT DISTINCT application_name FROM pg_stat_activity WHERE query LIKE '%session_stats AS chart_name%';
确认后修改postgresql.conf添加如下配置即可:
# 替换单引号内的内容为上一步查询得到的实际应用名 log_exclude_application_names = 'pgAdmin 4'
该方案的优势是不需要分离pgAdmin和业务的访问账号,只会过滤对应应用的日志,不会误杀同账号下的业务查询。
方案3:按查询特征正则过滤(PostgreSQL 13及以上版本支持)
如果pgAdmin和业务使用同一个账号、同一个应用名,你可以通过正则匹配查询内容的方式过滤监控语句,修改postgresql.conf添加如下配置:
log_filter_rule = 'exclude:query~*''SELECT.*session_stats AS chart_name.*pg_stat_database'''
该正则会匹配所有包含你提供的监控查询特征的语句,直接排除不记入日志,注意不要写过于宽泛的正则,避免误过滤业务查询。
配置生效方式
修改完postgresql.conf后无需重启数据库,执行如下命令重载配置即可生效:
SELECT pg_reload_conf();
内容的提问来源于stack exchange,提问作者adarshj
相关产品推荐
相关产品推荐

