【问题标题】:Get internal parse tree of an SQL query获取 SQL 查询的内部解析树
【发布时间】:2021-11-21 12:26:54
【问题描述】:

我发现了一个有趣的库libpg_query,它允许将任意 Postgres SQL 查询解析为内部解析树,就像 Postgres 实际理解查询的方式一样。它离线运行,它是对 Postgres 源代码的重写。对某些人来说,这可能是一件积极的事情,但对我来说却不是。您实际上不会知道,哪些列会在星号表达式 (SELECT * FROM user) 中被提取,它们的类型等等。

而且它不能为 windows 编译,哈哈。

但是 Postgres 客户端确实可以编译,并且这段代码在其中,但是如何访问它呢? Postgres 是否有任何命令可以解析查询并返回结果树?有点像EXPLAIN,但解析步骤更早。我在文档中找不到,其他人都只是重定向到上述库。

【问题讨论】:

  • SQL 解析 存在,可能也适用于 C。然后您可以自己解决* 和索引使用情况。如果您将测试 DB + 查询的结果与explain 进行比较,您就会到达那里。这对于真正的(w.r.t. 容易出错的)编程语言来说更重要,但您可能会使用解析器生成器。这是大量的抽象作品,起首!
  • 这不是由 PostgreSQL 客户端完成的,而是由服务器完成的。您可能可以编写一个使用src/backend/parser 中代码的C 函数。但这不会是独立的。

标签: sql postgresql metaprogramming sql-parser


【解决方案1】:

你可以使用sqlglot,一个我写的纯python SQL解析器和转译器。

import sqlglot

sqlglot.parse(sql)

【讨论】:

  • 这不是我要找的,但你是个传奇
猜你喜欢
  • 1970-01-01
  • 2020-03-08
  • 2019-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多