在CVS项目中提交包含sql查询的文件之前,我想先验证它们的语法.
为了做到这一点,我有一个commitinfo脚本,但我很难确定sql命令是否有效.psql
似乎没有干运行模式,从语法(在源代码中)构建我自己的postgresql dialact tester似乎需要很长时间.
脚本可能包含多个查询,因此不能用EXPLAIN
来表示.
有什么提示吗?
在CVS项目中提交包含sql查询的文件之前,我想先验证它们的语法.
为了做到这一点,我有一个commitinfo脚本,但我很难确定sql命令是否有效.psql
似乎没有干运行模式,从语法(在源代码中)构建我自己的postgresql dialact tester似乎需要很长时间.
脚本可能包含多个查询,因此不能用EXPLAIN
来表示.
有什么提示吗?
我最近编写了一个实用程序,用于静态判断PostgreSQL的SQL语法.它利用用于postgres的嵌入式SQL C预处理器ecpg来判断SQL语法,因此它使用与postgres本身内置的解析器完全相同的解析器.
你可以在github上查看:http://github.com/markdrago/pgsanity.你可以浏览一下自述文件,更好地了解它的工作原理,并了解如何安装它.以下是如何使用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"