【发布时间】: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