一尘不染

PostgreSQL语法检查而不运行查询

sql

我想先验证包含sql查询的文件的语法,然后才能在我的CVS项目中提交它们。

为了做到这一点,我有一个commitinfo脚本,但是我很难找出sql命令是否有效。psql似乎没有空运行模式,并且从语法(在源代码中)构建我自己的postgresql-
dialet测试器似乎很麻烦。

脚本可能包含多个查询,因此EXPLAIN不能将其包装。

有什么提示吗?


阅读 207

收藏
2021-03-17

共1个答案

一尘不染

我最近写了一个实用程序,用于静态检查PostgreSQL的SQL语法。它利用ecpg(用于postgres的嵌入式SQL
C预处理程序)检查SQL语法,因此它使用与Postgres本身完全相同的解析器。

您可以在github上查看它:http :
//github.com/markdrago/pgsanity。您可以略读README,以更好地了解其工作原理并获得安装方法的指导。这是关于如何使用pgsanity的简短示例:

$ pgsanity good1.sql good2.sql bad.sql
bad.sql: line 1: ERROR: syntax error at or near "bogus_token"

$ find -name '*.sql' | xargs pgsanity
./sql/bad1.sql: line 59: ERROR: syntax error at or near ";"
./sql/bad2.sql: line 41: ERROR: syntax error at or near "insert"
./sql/bad3.sql: line 57: ERROR: syntax error at or near "update"
2021-03-17