可扩展的linter for sql
squabble的Python项目详细描述
捕获不安全的SQL迁移。
$ squabble sql/migration.sql sql/migration.sql:4:46 ERROR: column "uh_oh" has a disallowed constraint [1004] ALTER TABLE big_table ADD COLUMN uh_oh integer DEFAULT 0; ^ # Use --explain to get more information on a lint violation $ squabble --explain 1004ConstraintNotAllowed When adding a column to an existing table, certain constraints can have unintentional side effects, like locking the table or introducing performance issues. ...
口角也可以是integrated with your editor来捕捉 SQL文件。
$echo'SELECT * FROM WHERE x = y;'| squabble --reporter=plain stdin:1:15 CRITICAL: syntax error at or near "WHERE"
目前,大多数规则都集中在postgres和它的 怪癖。但是,争吵可以解析任何ansi sql和 具体到其他数据库都很感激!
安装
$ pip3 install squabble $ squabble --help
注意
只有Python3.5+才支持争吵
如果要从源安装:
$ git clone https://github.com/erik/squabble.git &&cd squabble $ python3 -m venv ve &&source ve/bin/activate $ python setup.py install $ squabble --help
配置
要查看规则列表,请尝试
$ squabble --list-rules
然后,显示有关规则的详细信息(如基本原理 和配置选项)
$ squabble --show-rule AddColumnsDisallowConstraints
一旦配置文件就位,就可以显式地将其传递到 命令行,或自动查找。
$ squabble -c path/to/config ...
如果在命令行中没有明确给出,那么crabble将查找 名为.squabblerc的文件位于以下位置(按顺序):
- ./.squabblerc
- (git_repo_root)/.squabblerc
- ~/.squabblerc
每个文件配置
还可以使用SQL行注释在文件级应用配置 以-- enable:RuleName或-- disable:RuleName的形式。
例如,要对一个文件禁用RuleA并启用RuleB, 这可以做到:
-- disable:RuleA -- enable:RuleB config=value array=1,2,3 SELECTemailFROMusersWHERE...;
示例配置
{"reporter":"color","plugins":["/some/directory/with/custom/rules"],"rules":{"AddColumnsDisallowConstraints":{"disallowed":["DEFAULT","FOREIGN","NOT NULL"]}}}
现有技术
squabble当然不是这个领域的第一个工具。如果它 不符合您的需要,请考虑以下工具之一:
致谢
如果没有:
- libpg_query-邮政 查询分析器
- pglast-python绑定到 libpg_查询
- 博士后-…显然
使用的logo image 在文档中是由gianni-dolce merda从名词 项目