由 John Doe 五月 13, 2026
pg-index-health-sql 是一组用于分析 PostgreSQL 库表结构、检测数据库问题并推行最佳实践的 SQL 查询脚本合集。

项目简介
pg-index-health-sql 提供一系列精选原生 SQL 查询语句,可用于识别 PostgreSQL 数据库中常见的库表结构问题,例如冗余索引、缺失主键、低效表结构等。
该工具无需依赖外部库或框架,可在数据库原生环境中完成轻量级分析,适合直接在 psql 会话、自定义脚本或监控大盘中使用。
支持的 PostgreSQL 版本
- PostgreSQL 14
- PostgreSQL 15
- PostgreSQL 16
- PostgreSQL 17
- PostgreSQL 18
对旧版 PostgreSQL 的兼容说明
项目不再保证对更早版本的兼容性,但大概率仍可正常运行。
本项目仅专注维护当前官方仍支持的 PostgreSQL 版本。
更多详情可参阅 PostgreSQL 版本支持策略。
可检测的检查项
pg-index-health-sql 可检测以下 40 类数据库问题:
- 无效(损坏)索引(查看 SQL)
- 重复索引(完全一致的索引)(查看 SQL)
- 交集索引(部分字段重合的索引)(查看 SQL)
- 未被使用的索引(查看 SQL)
- 无对应索引的外键(查看 SQL)
- 包含空值字段的索引(查看 SQL)
- 存在索引缺失的表(查看 SQL)
- 未设置主键的表(查看 SQL)
- 索引膨胀问题(查看 SQL)
- 表数据膨胀问题(查看 SQL)
- 缺少注释说明的数据表(查看 SQL)
- 缺少注释说明的字段(查看 SQL)
- 使用 JSON 类型的字段(查看 SQL)
- 非主键却使用自增序列类型的字段(查看 SQL)
- 缺少注释说明的函数(查看 SQL)
- 包含布尔类型字段的索引(查看 SQL)
- 存在未生效约束的数据表(查看 SQL)
- 数组字段上建立的 B 树索引(查看 SQL)
- 序列即将溢出风险(查看 SQL)
- 使用自增序列类型的主键(查看 SQL)
- 重复外键(完全一致的外键)(查看 SQL)
- 交集外键(部分字段重合的外键)(查看 SQL)
- 名称存在溢出风险的数据库对象(查看 SQL)
- 与其他表无关联关系的数据表(查看 SQL)
- 关联字段类型不匹配的外键(查看 SQL)
- 仅有 0 个或 1 个字段的数据表(查看 SQL)
- 命名不符合规范的数据库对象(查看 SQL)
- 命名不符合规范的字段(查看 SQL)
- 使用变长字符而非 UUID 类型做主键的表(查看 SQL)
- 使用固定长度 varchar(n) 类型的字段(查看 SQL)
- 在非空字段上包含多余 WHERE 条件的索引(查看 SQL)
- 疑似使用业务自然键作为主键的表(查看 SQL)
- 使用 money 货币类型的字段(查看 SQL)
- 时间戳字段位于联合索引中间位置的索引(查看 SQL)
- 使用 timestamp 时间戳类型的字段(查看 SQL)
- 主键字段未排在表字段首位的数据表(查看 SQL)
- 除主键外所有字段均可为空的数据表(查看 SQL)
- 使用 char(n) 定长字符类型的字段(查看 SQL)
- 使用表继承特性的数据表(查看 SQL)
- 多字段外键中存在可空关联字段的外键(查看 SQL)
参考
pg-index-health-sql:https://github.com/mfvanek/pg-index-health-sql