如何为复杂的 sql 查询获取中间数据。 PostgreSQL
Posted
技术标签:
【中文标题】如何为复杂的 sql 查询获取中间数据。 PostgreSQL【英文标题】:How to take an intermediate data for the complex sql query. Postgresql 【发布时间】:2015-08-19 07:03:45 【问题描述】:我对 postgresql 有一些复杂的查询,这些查询从几个表中获取数据,这些表通过左外连接运算符相互连接。
我需要测试这些查询,所以我需要一个用于测试的夹具,它只包含我需要的数据,而不是整个表的数据。
如何查看这些连接子查询的中间结果以将其用作固定装置?
例如,我有表 A、B 和 C 并查询
SELECT A.column
FROM A
LEFT JOIN B ON A.b_id = B.id
LEFT JOIN C ON A.c_id = C.a_id
当部分表显示需要的数据或像这样的东西。有没有现成的工具或方法呢?
很遗憾,EXPLAIN 和 ANALYZE 只显示统计数据和基准,而不是数据。
【问题讨论】:
这将是一件好事,但在 PostgreSQL 中,您最好的选择可能是执行部分查询以获得中间结果。 如果我对您的理解正确,您正在寻找一种方法来获得A left join B on A.b_id = B.id
的产品,但无需编辑查询。对吗?
【参考方案1】:
也许你的意思
SELECT A.*
FROM A
LEFT JOIN B ON A.b_id = B.id
LEFT JOIN C ON A.c_id = C.a_id
limit 10
从连接中查看 A 中发生了什么?
或许
select concat('from table a', a.col1, a.col2...) ,
concat('from table b', b.col1, b.col2...)
from ...
concat等字符串函数:http://www.postgresql.org/docs/9.1/static/functions-string.html
还值得在 array_append() 中查看 http://www.postgresql.org/docs/9.1/static/functions-array.html
【讨论】:
没有。我正在寻找类似 PgAdminIII 中的 Explain Query 之类的工具。也许是一个控制台命令或其他东西来自动化这个过程 @AlexeyProtchenko:pgAdmin 的“解释查询”输出仅使用本机explain
语句的输出。因此,如果您要查找的信息在 pgAdmin 中显示的(图形)执行计划中,那么它也在 explain
或 explain (analyze, verbose)
的输出中
@a_horse_with_no_name,我的意思是我需要一个像解释查询这样的工具,它应该显示来自表的中间数据,而不是一个基准
@AlexeyProtchenko:对不起,我不明白。 pgAdmin 的解释计划显示的数据是在explain
命令的输出中可用。 pgAdmin 的解释计划输出究竟向您显示了您在“常规”explain
的输出中找不到的内容?
@a_horse_with_no_name。不,我找不到所需的功能,既不是 pgAdmin 的解释,也不是简单的控制台解释分析。我在查询性能的每个步骤中都需要一个中间数据。就像 B 表数据的一部分用于连接到 A,而不是整个 B 表数据以上是关于如何为复杂的 sql 查询获取中间数据。 PostgreSQL的主要内容,如果未能解决你的问题,请参考以下文章
Java/Hibernate:如何为复杂的 SQL 编写 DAO 代码
Grafana - 如何为 Mysql 数据源创建 sql 查询部分变量/宏