问题
当某些应用程序使用扩展查询协议/准备好的语句来查询 Postgres(出于性能原因,您通常应该这样做)并由于某种原因获得查询错误或只是超过“慢查询日志”阈值(
log_min_duration_statement
配置参数)时,您将无法在查询日志中获得完整的可执行语句!而是 2 个部分 - 一个带有美元类型占位符的查询,然后是实际参数值列表 - 如果您想要实际重新运行查询(主要使用 EXPLAIN ANALYZE)并查看为什么这个特定的参数值组合很慢,则需要“填写”它们。
解决方案
以前,如果需要重新运行一些参数化的准备好的语句,我会执行以下操作之一:
手动替换/填充
如果是单个或几个查询,且占位符/参数数量较少,请检查日志文件并手动填写空白。没什么大不了的,好吧,我想偶尔做点工作。
使用我的临时脚本
当参数数量太大(10+)或需要处理许多查询/执行时,我查看了自制的参数匹配/填充 Python 脚本的位置,并希望它能够适用于特定的日志配置……因为它是一个非常简单的正则表达式匹配行迭代器,仅支持
log_line_prefix
我主要处理的几种常见格式。
但是现在 - pgbadger 来救援了!
每个接触过 Postgres 的人都喜欢 pgbadger ,对吧?我也是。但有趣的是 - 这个工具的唯一缺点是它有 大量 的命令行参数......我数了一下,大约有一百个,不是开玩笑!
所以,最后,在最近的一个幸运的日子,我因为其他原因再次浏览了所有这些标志......并发现了:

瞧!
演示用法
实际情况是这样的:

PS
请注意,如果 pgbadger 调用失败或没有得到正确的结果,则可能是日志格式自动检测出现了问题(尽管大部分情况下都能正常工作!)并且需要通过参数提供帮助
--prefix
。
PS 2
还要注意,实际的准备好的语句参数值并不总是保证存在,因为它们可以通过相对未知的
log_parameter_max_length
和
log_parameter_max_length_on_error
参数在敏感环境中被禁用 - 在这种情况下,当然即使是拥有 100 个参数的 pgbadger 也无法帮助你
![]()

编辑推荐:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 使用 pgbadger 自动填充准备好的语句占位符
使用 pgbadger 自动填充准备好的语句占位符
26-03-14 - RockyLinux部署流水线实战指南(从零搭建CI/CD自动化部署流程)
- 介绍 pg_later:受 Snowflake 启发的 Postgres 异步查询
- 信创数据库沙龙(南京站|开启报名)
信创数据库沙龙(南京站|开启报名)
26-03-14 - 在 Kubernetes 上用 KubeBlocks + Dify 快速构建生产级 AIGC 应用
- 炙手可热!信创时代下的PostgreSQL数据库
炙手可热!信创时代下的PostgreSQL数据库
26-03-14 - PG统计信息浅析
PG统计信息浅析
26-03-14 - 【PGCCC】5秒上手,小而精悍的PostgreSQL安全评估工具#PCA
- 【PGCCC】PostgreSQL 保存点
【PGCCC】PostgreSQL 保存点
26-03-14 - Postgres 如何在磁盘上存储和索引数据?
Postgres 如何在磁盘上存储和索引数据?
26-03-14

