首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >确定查询命中的关系

确定查询命中的关系
EN

Stack Overflow用户
提问于 2020-05-20 00:46:26
回答 1查看 27关注 0票数 0

我有一个由模板机制构造的PostgreSQL查询。我想要做的是确定查询在运行时实际命中的关系,并将它们记录在关系中。所以这是一个非常基本的血统问题。简单地查看查询中出现的关系名称(或解析查询)并不容易解决这个问题,因为查询有些复杂,模板机制会插入像WHERE FALSE这样的表达式。

当然,我可以在查询中使用EXPLAIN并手动插入我找到的关系名称。然而,这有两个缺点:

  1. EXPLAIN实际上运行了这个查询。不幸的是,运行查询需要花费大量的时间,所以两次运行查询并不理想,一次是针对结果,一次是手动的。

在阅读了一些文档之后,我发现on可以自动地将EXPLAIN的结果记录到CSV文件中,并将其读回一个关系。但是,据我所知,这意味着将所有东西记录到CSV,这对我来说不是一个选择。而且,只有在执行所需的时间比预定的阈值更长时,才会触发自动日志记录,而且我希望对一些特定的查询执行此操作,而不是对所有耗时的查询执行。

PS:这不需要在数据库层完全实现。例如,一旦我在关系中得到了EXPLAIN的结果,我就可以解析它并提取它在应用层碰到的关系。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-20 07:56:20

EXPLAIN不执行查询。

您可以运行EXPLAIN (FORMAT JSON) SELECT ...,它将以JSON的形式返回执行计划。只需提取所有Relation Name属性,就可以得到扫描的表列表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61903233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档