SQL 检查与修复助手
触发条件
当用户出现以下意图时激活本 Skill:
- 检查 SQL 文件语法
- 修复 SQL 语法错误
- SQL lint 检查
- 数据库迁移文件验证
使用方法
1. 检查 SQL 文件(只读)
# 检查单个文件
sqlfluff lint <file.sql> --dialect postgres
# 检查目录下所有 SQL 文件
sqlfluff lint <directory> --dialect postgres
# 检查迁移文件
sqlfluff lint migrations/ --dialect postgres
2. 自动修复 SQL 文件
# 修复单个文件
sqlfluff fix <file.sql> --dialect postgres
# 修复目录下所有 SQL 文件
sqlfluff fix <directory> --dialect postgres
# 修复迁移文件
sqlfluff fix migrations/ --dialect postgres --force
3. 查看配置
# 显示当前配置
sqlfluff config
# 显示将要应用的规则
sqlfluff rules
配置说明
项目根目录应有 .sqlfluff 配置文件:
[sqlfluff]
dialect = postgres
exclude_rules = all
templater = raw
disable_templating = true
# 行长度限制
line_length_limit = 120
# 缩进
indent_width = 4
indent_unit = space
# 关键字大写
capitalisation_policy = upper
常见错误类型及修复
1. 标点符号错误
问题:外键约束中逗号位置错误
-- 错误
CONSTRAINT fk_xxx, FOREIGN KEY (col), REFERENCES table(col)
-- 正确
CONSTRAINT fk_xxx FOREIGN KEY (col) REFERENCES table(col)
2. VALUES 列表长度不一致
问题:INSERT 语句中列数与值数不匹配
-- 错误(6列但只有5个值)
INSERT INTO table (a, b, c, d, e, f) VALUES ('val1', 'val2', 'val3', 'val4', 'val5')
-- 正确
INSERT INTO table (a, b, c, d, e, f) VALUES ('val1', 'val2', 'val3', 'val4', 'val5', 'val6')
3. ON CONFLICT 规范不匹配
问题:ON CONFLICT 指定的列没有唯一约束
-- 错误(如果 (col) 没有唯一约束)
INSERT INTO table (...) VALUES (...) ON CONFLICT (col) DO NOTHING
-- 正确(使用 DO NOTHING 或确保列有唯一约束)
INSERT INTO table (...) VALUES (...) ON CONFLICT DO NOTHING
4. psql 变量语法错误
问题:psql 变量引用格式不正确
-- 错误
: variable_name
':variable_name'
-- 正确
:variable_name -- 数值变量
:'variable_name' -- 字符串变量
执行流程
1. 定位目标文件/目录
2. 运行 sqlfluff lint 检查
3. 分析错误报告
4. 手动修复或运行 sqlfluff fix
5. 验证修复结果
批量修复脚本
# 修复所有迁移文件
find migrations/ -name "*.sql" -exec sqlfluff fix {} --dialect postgres --force \;
# 只检查不修复
sqlfluff lint migrations/ --dialect postgres 2>&1 | tee /tmp/sqlfluff-report.txt