You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 14日志未输出SQL执行duration时长问题咨询

问题产生原因

PostgreSQL日志输出存在固定的触发逻辑,当前配置冲突导致无法打印执行时长:

  • 配置项log_statement = 'all'的触发时机是SQL开始执行前,此时SQL尚未运行完成,无法获取执行耗时,因此打印的日志只会包含SQL文本,不会携带duration字段
  • 配置项log_min_duration_statement = 400的触发时机是SQL执行完成后,本可以打印带耗时的日志,但该逻辑会被log_statement = 'all'的提前打印逻辑覆盖,不会再输出带时长的日志行
  • 额外配置的log_duration = off关闭了全局耗时打印开关,也不会单独输出SQL执行时长
配置调整方法

按如下方式修改配置即可实现预期的日志效果,输出精度为毫秒级:

  1. 关闭执行前打印SQL的逻辑,将log_statement的取值从'all'修改为'none'
  2. 保留log_min_duration_statement = 400配置不变,该参数单位为毫秒,触发时会自动在日志中拼接duration: X.XXX ms前缀和SQL文本,和给出的预期日志格式完全匹配
  3. 保持log_duration = off即可,若开启该参数会将所有SQL的耗时单独打印为一行日志,和SQL文本拆分,反而不符合预期格式

调整完成后的核心配置参考:

logging_collector = on  
log_min_duration_statement = 400
log_connections = on
log_disconnections = on
log_duration = off
log_line_prefix = '%Q %r %d '
log_statement = 'none'

配置修改完成后,执行以下命令重载配置即可生效,无需重启数据库:

SELECT pg_reload_conf();

补充说明:如果需要记录所有SQL的执行耗时(无论快慢),只需将log_min_duration_statement的值修改为0即可。

内容的提问来源于stack exchange,提问作者AlexanderKondrat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:30:51