PostgreSQL 9.6中/pg_log/目录位置查询:慢查询追踪遇阻
解决PostgreSQL 9.6找不到pg_log目录的问题
嘿,作为经常帮PostgreSQL新手踩坑的老玩家,我来给你捋捋这个问题——毕竟从9.2升到9.6,确实有些默认配置的小变化容易让人懵。
第一步:先搞清楚日志目录的实际配置路径
PostgreSQL的日志目录是由log_directory参数控制的,9.6的默认值虽然还是pg_log,但如果是自定义安装或者配置被修改过,路径可能不一样。你可以通过psql执行命令直接查看:
SHOW log_directory;
- 如果返回的是相对路径(比如
pg_log),那这个目录是相对于PostgreSQL的数据目录的,你得先找到数据目录的位置:
把两个路径拼起来就是实际的日志目录路径(比如数据目录是SHOW data_directory;/var/lib/postgresql/9.6/main,那日志目录就是/var/lib/postgresql/9.6/main/pg_log)。 - 如果返回的是绝对路径,直接去对应的路径找就行。
第二步:检查日志收集功能是否开启
如果上面的路径确实不存在,很可能是因为日志收集器没打开,PostgreSQL不会自动创建pg_log目录。你可以检查这个参数:
SHOW logging_collector;
如果返回的是off,那你需要修改postgresql.conf配置文件:
- 找到
logging_collector = off这一行,改成logging_collector = on - 同时确保
log_destination = 'csvlog'或者包含csvlog(这是生成文件日志的必要配置) - 重启PostgreSQL服务,之后
pg_log目录就会自动生成了。
第三步:排查权限问题(少见但值得注意)
如果上面两步都没问题还是找不到目录,可能是PostgreSQL运行用户(一般是postgres)没有权限在数据目录下创建子目录。你可以检查数据目录的权限:
ls -ld $(psql -t -c "SHOW data_directory;")
确保目录的所有者是postgres用户,且有读写权限。
最后提一句和9.2的区别
9.2默认的log_directory确实是data/pg_log,但9.6在默认配置上其实没改这个路径,大概率是你的9.6实例配置被调整过,或者日志收集器没开启导致目录没生成~
内容的提问来源于stack exchange,提问作者Sajeev
相关产品推荐
相关产品推荐

