pg-index-health-sql: 表结构和索引的健康检测

John Doe 五月 13, 2026

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

image

项目简介

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 类数据库问题:

  1. 无效(损坏)索引(查看 SQL
  2. 重复索引(完全一致的索引)(查看 SQL
  3. 交集索引(部分字段重合的索引)(查看 SQL
  4. 未被使用的索引(查看 SQL
  5. 无对应索引的外键(查看 SQL
  6. 包含空值字段的索引(查看 SQL
  7. 存在索引缺失的表(查看 SQL
  8. 未设置主键的表(查看 SQL
  9. 索引膨胀问题(查看 SQL
  10. 表数据膨胀问题(查看 SQL
  11. 缺少注释说明的数据表(查看 SQL
  12. 缺少注释说明的字段(查看 SQL
  13. 使用 JSON 类型的字段(查看 SQL
  14. 非主键却使用自增序列类型的字段(查看 SQL
  15. 缺少注释说明的函数(查看 SQL
  16. 包含布尔类型字段的索引(查看 SQL
  17. 存在未生效约束的数据表(查看 SQL
  18. 数组字段上建立的 B 树索引(查看 SQL
  19. 序列即将溢出风险(查看 SQL
  20. 使用自增序列类型的主键(查看 SQL
  21. 重复外键(完全一致的外键)(查看 SQL
  22. 交集外键(部分字段重合的外键)(查看 SQL
  23. 名称存在溢出风险的数据库对象(查看 SQL
  24. 与其他表无关联关系的数据表(查看 SQL
  25. 关联字段类型不匹配的外键(查看 SQL
  26. 仅有 0 个或 1 个字段的数据表(查看 SQL
  27. 命名不符合规范的数据库对象(查看 SQL
  28. 命名不符合规范的字段(查看 SQL
  29. 使用变长字符而非 UUID 类型做主键的表(查看 SQL
  30. 使用固定长度 varchar(n) 类型的字段(查看 SQL
  31. 在非空字段上包含多余 WHERE 条件的索引(查看 SQL
  32. 疑似使用业务自然键作为主键的表(查看 SQL
  33. 使用 money 货币类型的字段(查看 SQL
  34. 时间戳字段位于联合索引中间位置的索引(查看 SQL
  35. 使用 timestamp 时间戳类型的字段(查看 SQL
  36. 主键字段未排在表字段首位的数据表(查看 SQL
  37. 除主键外所有字段均可为空的数据表(查看 SQL
  38. 使用 char(n) 定长字符类型的字段(查看 SQL
  39. 使用表继承特性的数据表(查看 SQL
  40. 多字段外键中存在可空关联字段的外键(查看 SQL

参考

pg-index-health-sql:https://github.com/mfvanek/pg-index-health-sql