sql - 明确区分 pg_stat_statements 中的类似查询?
问题描述
pg_stat_statements(谢天谢地)在规范化查询以聚合统计数据方面非常聪明,无论您传递的参数如何。但是,我面临这样一种情况,即从我们的应用程序的许多位置调用特定查询,我想根据这些不同的位置获得单独的统计信息。受Marginalia library的启发,我尝试附加 SQL 注释来注释查询。不幸的是,它不起作用。看这个例子:
SELECT * FROM users WHERE email = 'a@b.c' /* action: signup */
SELECT * FROM users WHERE email = 'x@y.z' /* action: login */
发生的情况是 pg_stat_statements 存储带有它看到的第一条评论的查询的规范化表示:
SELECT * FROM users WHERE email = $1 /* action: signup */
然后,如果我用不同的评论(或根本没有评论)调用相同的查询,则统计信息将汇总到同一个项目中。规范化查询表示中有效地忽略了注释。
有什么方法可以调用等效的 SQL 查询,但由 pg_stat_statements 单独跟踪它们?
解决方案
我认为可能解决您的问题。这不是最好的解决方案,但也许对您有帮助。
您可以为位于不同位置的非常相似查询的 WHERE 子句添加更多限制,例如“true = true”以“欺骗”pg_stat_statements 并获得单独的统计信息(至少在 Postgresql 9.2 中有效)。
例子:
SELECT * FROM users WHERE email = 'a@b.c'
SELECT * FROM users WHERE email = 'x@y.z' AND true = true
pg_stat_statements 输出(“查询”字段):
SELECT * FROM users WHERE ? = ?
SELECT * FROM users WHERE ? = ? AND ? = ?
推荐阅读
- javascript - 如何使用 Ember 数据缓存随机结果?
- python - 使用 Selenium 登录富国银行
- angular - 堆叠条形图中的 Highcharts 三角形(或任何类型的标记指针)
- sql-server - 如何将 JSON 与表连接起来?
- reactjs - 禁用在详细信息列表中单击行的检查
- scala - 如何在scala中重构相似和重复的功能
- bazel - 从系统包含目录中隔离 Bazel C++ 构建
- c - IOCTL - 了解文件描述符参数
- c++ - C ++访问联合结构中的变量
- c# - 在 C# 中混合 MockVerify 和 FluentAssertions.Should()