选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档 / 配置参数 / 错误报告和日志

CONFIGURATION PARAMETER错误报告和日志 / 记录什么

log_statement

设置要记录的 SQL 语句类型。

Sets the type of statements logged.

枚举 会话(超级用户) 引入 9.0(基线) 现存至 20 devel 0 次默认值变更

类型
枚举enum
上下文
会话(超级用户)超级用户可在会话内用 SET 修改
默认值
none
枚举值
none, ddl, mod, all
引入版本
9.0(基线)
状态
现存

PostgreSQL 18 手册 官方文档

版本轨迹

相对 PostgreSQL 17 无变化。

默认值变迁

none 9.0 – 20

默认值自 PostgreSQL 9.0 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。

手册说明

PostgreSQL 18 手册 · 19.8 错误报告和日志 本站手册 官方原文

本版译文与 PostgreSQL 15 完全一致,下面就是同一段文字。

控制哪些 SQL 语句被记录。有效值是 none (off)、ddlmodall(所有语句)。ddl记录所有数据定义语句,例如CREATEALTERDROP语句。mod记录所有ddl语句,外加数据修改语句例如INSERT, UPDATEDELETETRUNCATE, 和COPY FROM。 如果PREPAREEXECUTEEXPLAIN ANALYZE包含合适类型的命令,它们也会被记录。对于使用扩展查询协议的客户端,当收到一个执行消息时会产生日志并且会包括绑定参数的值(任何内嵌的单引号会被双写)。

默认值为none。 只有超级用户和具有适当SET权限的用户才能更改此设置。

Note

即使使用log_statement = all设置,包含简单语法错误的语句也不会被记录。这是因为只有在完成基本语法解析并确定了语句类型之后才会发出日志消息。在扩展查询协议的情况下,在执行阶段之前(即在解析分析或规划期间)出错的语句也不会被记录。将log_min_error_statement设置为ERROR(或更低)来记录这种语句。

记录的语句可能会透露敏感数据,甚至包含明文密码。

机制详解

log_statement 可选 none、ddl、mod、all。ddl 记录数据定义命令,mod 再加入数据变更命令,all 记录所有到达日志点的语句;PREPARE、EXECUTE 与 EXPLAIN ANALYZE 按其包含命令分类。

使用扩展查询协议时,收到 Execute 才记录,并包含 Bind 参数值。即使设为 all,基本解析失败的简单语句,以及在 Execute 前的解析分析或规划阶段失败的扩展协议语句也不会记录;这些错误路径需要 log_min_error_statement。

它属于 SUPERUSER 上下文的会话参数。语句文本与 Bind 值可能暴露个人数据、令牌,甚至明文密码,因此范围选择、访问、脱敏、传输与保留必须同时作为安全控制和可观测性选择。

调优建议

按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。

  • OLTP在线事务处理

    常规 OLTP 以 none 或 ddl 为基线,查询性能使用时长阈值或抽样。启用 mod/all 前,测试日志量,并为 SQL 文本与 Bind 值建立具体脱敏和访问策略。

  • OLAP分析与批处理

    分析排障使用角色或会话限定窗口,不要集群级 all。长生成 SQL 与大 Bind 值可能主导日志并暴露源数据。

  • 小规格低配实例与开发机

    优先使用 ddl 或定向阈值;即使节点安静,all 也可能压垮磁盘并泄漏秘密。保留 log_min_error_statement 以覆盖 log_statement 漏掉的语法/解析失败。

常见问题

  • 误以为 all 会捕获语法错误或 Execute 前的扩展协议失败;这些路径应使用 log_min_error_statement。
  • 忘记扩展协议在 Execute 日志中包含 Bind 参数值。
  • 在没有脱敏与严格访问控制时记录含明文密码、Bearer Token、个人数据或应用秘密的 SQL。
  • 未限制日志吞吐、磁盘、转运与保留就集群级启用 mod 或 all。

演化历史

相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。

  1. PostgreSQL 20 ← 19 沿用 19

    事实沿用 19

逐版本快照

每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。

版本 默认值单位上下文类型最小值最大值枚举值
9.0 none 会话(超级用户) 枚举 none, ddl, mod, all
9.1 none 会话(超级用户) 枚举 none, ddl, mod, all
9.2 none 会话(超级用户) 枚举 none, ddl, mod, all
9.3 none 会话(超级用户) 枚举 none, ddl, mod, all
9.4 none 会话(超级用户) 枚举 none, ddl, mod, all
9.5 none 会话(超级用户) 枚举 none, ddl, mod, all
9.6 none 会话(超级用户) 枚举 none, ddl, mod, all
10 none 会话(超级用户) 枚举 none, ddl, mod, all
11 none 会话(超级用户) 枚举 none, ddl, mod, all
12 none 会话(超级用户) 枚举 none, ddl, mod, all
13 none 会话(超级用户) 枚举 none, ddl, mod, all
14 none 会话(超级用户) 枚举 none, ddl, mod, all
15 none 会话(超级用户) 枚举 none, ddl, mod, all
16 none 会话(超级用户) 枚举 none, ddl, mod, all
17 none 会话(超级用户) 枚举 none, ddl, mod, all
18 none 会话(超级用户) 枚举 none, ddl, mod, all
19 none 会话(超级用户) 枚举 none, ddl, mod, all
20 沿用 none 会话(超级用户) 枚举 none, ddl, mod, all

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
Reporting and Logging 错误报告和日志 25 个
记录什么 25
application_name 字符串 会话 空字符串
设置在统计信息和日志中报告的应用名称。 现存
debug_pretty_print 布尔 会话 on
对解析树和计划树的显示进行缩进美化。 现存
debug_print_parse 布尔 会话 off
记录每个查询的解析树。 现存
debug_print_plan 布尔 会话 off
记录每个查询的执行计划树。 现存
debug_print_raw_parse 布尔 会话 off
把每条查询的原始解析树写入日志。 现存
debug_print_rewritten 布尔 会话 off
记录每个查询重写后的解析树。 现存
log_autoanalyze_min_duration 整数 重载生效 10 min
设置记录 autovacuum ANALYZE 动作的最短执行时间。 现存
log_autovacuum_min_duration 整数 重载生效 10 min 152 次
设置记录 autovacuum 操作所需达到的最短执行时间。 现存
log_checkpoints 布尔 重载生效 on 151 次
记录每次检查点。 现存
log_connections 字符串 连接时(超级用户) 空字符串 182 次
记录连接建立与初始化过程中的指定阶段。 现存
log_disconnections 布尔 连接时(超级用户) off 9.51 次
记录会话结束及其持续时间。 现存
log_duration 布尔 会话(超级用户) off
记录每条已完成 SQL 语句的执行时长。 现存
log_error_verbosity 枚举 会话(超级用户) default
设置日志消息的详细程度。 现存
log_hostname 布尔 重载生效 off
在连接日志中记录主机名。 现存
log_line_prefix 字符串 重载生效 %m [%p] 101 次
控制每行日志前添加的信息。 现存
log_lock_failures 布尔 会话(超级用户) off
记录锁获取失败。 现存
log_lock_waits 布尔 会话(超级用户) off 191 次
记录持续时间较长的锁等待。 现存
log_parameter_max_length 整数 会话(超级用户) -1 B
设置记录语句时绑定参数值可写入日志的最大字节数。 现存
log_parameter_max_length_on_error 整数 会话 0 B
设置发生错误时绑定参数值可写入日志的最大字节数。 现存
log_recovery_conflict_waits 布尔 重载生效 off
记录备用库恢复冲突等待。 现存
log_replication_commands 布尔 会话(超级用户) off
记录每条复制命令。 现存
log_statement 枚举 会话(超级用户) none
设置要记录的 SQL 语句类型。 现存
log_statement_max_length 整数
如果大于零,通过 log_statement、log_min_duration_statement、log_min_duration_sample 或 log_transaction_sample_rate 记录的每条语句,其文本都会被截断为最多这么多字节。 现存
log_temp_files 整数 会话(超级用户) -1 kB
记录大于指定千字节数的临时文件使用。 现存
log_timezone 字符串 重载生效 GMT 9.22 次
设置日志消息使用的时区。 现存