在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"

Sql相关问答推荐

判断前几行以查看值是否存在

PostgresQL查询以计算一天内的时间间隔

SQL查询根据两列对日期进行排序

雪花.如何判断子数组是否存在于另一个数组中?

如何删除具有重复列组合的行

在没有明显分区列的情况下使用多个分区的 Spark 窗口

如何删除具有特定字符的行

如何拆分具有逗号和冒号的字符串

为什么 query_to_xml 在 Postgres 中为易失性查询返回错误?

SQL 从调查中查找课程受欢迎程度

ORDER BY 首先具有特定值

用于排除特定邮箱域的 Where 子句

BigQuery JSON - 标量子查询产生了多个元素

PostgreSQL条件选择抛出错误

适用于所有(或大多数)数据库的高效 SQL 测试查询或验证查询

Pyspark:根据多个条件过滤数据框

如何删除没有唯一标识符的重复行

如何在 SQL Server 中以整数形式创建日期、月份和年份

使用复杂类型查询 Spark SQL DataFrame

ORA-01791: 不是 SELECTed 表达式