| name | pg-sql-audit |
| description | PostgreSQL SQL 上线前合规与风险审查专家。当用户提供待上线的 SQL(DML/DDL/DCL/函数/存储过程/触发器)及目标数据库连接信息,希望做上线前审查、代码评审、风险评估、锁风险检查、索引优化建议、回滚方案设计、SQL 注入审查、触发器安全审查时触发。触发关键词包括但不限于:'SQL 审查'、'上线审查'、'SQL 评审'、'这段 SQL 能不能上线'、'帮我看看这个 SQL 有没有风险'、'DDL 会不会锁表'、'这个变更安全吗'、'index 要不要加'、'帮我审查这段存储过程/触发器'、'SQL code review'。即使用户只说'帮我看看这几条SQL'或'这个改动能直接上生产吗'并附带了 SQL 文本,也应使用本 skill。 |
| tags | ["PostgreSQL","SQL 变更","SQL 审查"] |
| platform | ["claude-code","cursor"] |
| author | digoal |
| version | 1.0.0 |
| license | GNU General Public License v2.0 |
| homepage | https://github.com/digoal/skills |
pg-sql-audit:PostgreSQL SQL 上线前审查
对即将上线的 PostgreSQL SQL(DML/DDL/DCL/函数/存储过程/触发器)做严格的合规与风险审查,产出结构化、可执行的审查报告。
核心原则
- 只读、零风险:审查过程中对目标库的所有连接与查询必须只读,绝不执行任何会修改数据/结构的操作,绝不使用
EXPLAIN ANALYZE。
- 先问频率,再定级:如果用户未提供 SQL 的调用频率/执行场景(OLTP 高频 / 一次性报表 / 后台批处理),必须先暂停并询问,缺失该信息无法准确分级风险。
- 可执行优先:每一条风险发现都必须给出可直接复制使用的修正 SQL 和回滚方案,而不是泛泛而谈。
- 中文输出:报告全程使用中文,SQL 代码块保持规范格式化。
前置要求
- 环境需安装
psql(PostgreSQL 客户端)
- 数据库连接密码只能通过环境变量
PGPASSWORD 传递,禁止在命令行、日志、报告中出现明文密码
- 需要用户提供:目标库主机、端口、用户名、数据库名、待审查 SQL 文本
- 需要的数据库权限:能够
SELECT 系统视图(pg_stat_user_tables、pg_stat_activity、pg_locks、pg_constraint、pg_depend 等)及对目标表有只读权限;不需要写权限
工作流程
Step 0:信息完整性检查
在开始任何审查前,确认以下信息齐全:
Step 1:连接目标库,采集环境背景
使用 scripts/collect_context.sh 只读采集:
PGPASSWORD=<密码> ./scripts/collect_context.sh \
-h <host> -p <port> -U <user> -d <dbname> \
-t "schema1.table1,schema1.table2"
该脚本会依次采集:
- 实例版本、
statement_timeout/lock_timeout/idle_in_transaction_session_timeout 等关键参数
- 涉及表的
pg_stat_user_tables 统计(行数、死元组、最后 ANALYZE/VACUUM 时间)、表大小
- 涉及表的索引清单、外键依赖(正向+反向)、依赖的视图/物化视图、触发器定义
- 当前长事务/未提交事务、当前锁等待情况
会话级强制只读(SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY),不改变任何数据。
Step 2:解析 SQL,识别类型