如何获取Postgres SQL查询的内部解析树 是否有原生支持命令
解决方案
1. Postgres原生内置解析能力
Postgres自带原生函数直接输出解析阶段产物,无需依赖第三方库:
- 仅获取原始解析树(对应语法解析刚完成的阶段,早于
EXPLAIN的执行计划生成步骤):调用pg_parse_query(<SQL字符串>),返回的结构就是Postgres内部使用的标准解析树,和libpg_query的输出格式同源。 - 需要展开
SELECT *通配符、获取对应列名、列类型信息:调用pg_analyze_and_rewrite(<SQL字符串>),该函数会走完语法解析、语义分析、查询重写全流程,会关联当前数据库的表元数据自动补全通配符对应的实际列信息,刚好解决libpg_query离线解析无法处理星号的缺陷。
2. Windows环境适配方案
不需要自己编译Postgres客户端的解析模块,两种可选方案:
- 直接安装Windows官方版Postgres,本地启动一个轻量实例(空实例内存占用仅几十MB),连接后直接调用上述内置函数即可,无任何编译适配成本。
- 若需要离线无实例使用,可使用社区维护的libpg_query Windows兼容分支,已解决原生版本的Windows编译问题,可直接编译使用。
用法示例
解析SELECT * FROM "user"的完整信息,直接执行以下SQL即可:
SELECT pg_analyze_and_rewrite('SELECT * FROM "user"');
返回结果中会包含展开后的所有列名称、对应数据类型、所属表等完整元信息。
内容的提问来源于stack exchange,提问作者winwin
相关产品推荐
相关产品推荐

