解析 PostgreSQL 中 EXPLAIN 命令的输出

发布于 2024-12-14 19:04:13 字数 334 浏览 4 评论 0 原文

我正在开发一个需要解析执行计划的应用程序(通过发出 EXPLAIN [query] 命令作为输出生成的计划)。您知道我可以使用任何 Java 库来实现此目的吗?我发现 https://github.com/depesz/Pg--Explain 但它是构建的在 Perl 中。

我正在考虑的另一个选择是使用 PostgreSQL 9.1 中提供的 EXPLAIN [query] FORMAT XML。但是,在这种情况下,最好提供生成的计划的 XML 架构。

还有其他我不知道的解决方案吗?

I'm developing an application that requires parsing of execution plans (those produced as output by issuing an EXPLAIN [query] command). Are you aware of any Java library that I could use for this purpose? I found https://github.com/depesz/Pg--Explain but it is built in Perl.

Also another option I am considering is to use EXPLAIN [query] FORMAT XML which is available in PostgreSQL 9.1. However, in that case it would better to have the XML Schema of the generated plans available.

Is there any other solution I am not aware of?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

﹏雨一样淡蓝的深情 2024-12-21 19:04:13

你已经得到了正确的答案。为了满足您的自动化需求,请使用 XML 或以下工具:
https://github.com/depesz/Pg--Explain

对于我们其他人来说,交互式版本是真正的瑰宝,我将其发布在这里以便人们找到它:
http://explain.depesz.com/

解释本身的背景位于:
http://www.postgresql.org/docs/current/static/sql -解释.html
但似乎没有引用 DTD 或定义的模式来进行解释。

You've got the right answer right there. For your automated needs use XML or the tools at:
https://github.com/depesz/Pg--Explain

For the rest of us, the interactive version is a real gem, and I'm posting it here so people find it:
http://explain.depesz.com/

Background on explain itself is at:
http://www.postgresql.org/docs/current/static/sql-explain.html
But there does not appear to be a reference to a DTD or defined schema for explain.

烟酉 2024-12-21 19:04:13

我对解析Explain命令的XML计划输出有同样的要求。我使用了 LibXML2 库。它易于使用且功能强大。尝试一下。

I had the same requirement of parsing XML plan output of Explain command. I have used LibXML2 libray. It is easy to use and powerful. Try that.

┈┾☆殇 2024-12-21 19:04:13

我有类似的要求,并通过 psqljq 解决,例如:

psql $PG_URL -P pager=off -Aqt -c 'EXPLAIN (FORMAT JSON) SELECT version()' | jq

您还可以通过管道传输到您熟悉的其他编程语言,例如:

psql $PG_URL -P pager=off -Aqt -c 'EXPLAIN (FORMAT JSON) SELECT version()' |
  ruby -rjson -e 'pp JSON.parse($stdin.read)'

参考文献< /strong>

I have a similar requirement and solved by psql and jq, for example:

psql $PG_URL -P pager=off -Aqt -c 'EXPLAIN (FORMAT JSON) SELECT version()' | jq

You can also pipe to other programming languages you are familiar with, for example:

psql $PG_URL -P pager=off -Aqt -c 'EXPLAIN (FORMAT JSON) SELECT version()' |
  ruby -rjson -e 'pp JSON.parse($stdin.read)'

References

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文