我想先验证包含sql查询的文件的语法,然后才能在我的CVS项目中提交它们。
为了做到这一点,我有一个commitinfo脚本,但是我很难找出sql命令是否有效。psql似乎没有空运行模式,并且从语法(在源代码中)构建我自己的postgresql- dialet测试器似乎很麻烦。
psql
脚本可能包含多个查询,因此EXPLAIN不能将其包装。
EXPLAIN
有什么提示吗?
我最近写了一个实用程序,用于静态检查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"