由 John Doe 五月 28, 2026
总觉得 PostgreSQL 社区缺少好用的健康诊断工具?可以来试试 postgres_dba。
目录
专为 PostgreSQL 打造的 34 项诊断报表,可直接在 psql 中使用。 无需代理、后台进程和外部依赖,全程仅依靠 SQL 实现。
支持表膨胀评估、索引健康检测、锁链路分析、自动清理监控、SQL 语句分析、数据损坏检查、缓冲区缓存查看等诸多功能。输入命令 :dba 即可一键启用。

快速上手
git clone https://github.com/NikolayS/postgres_dba.git
cd postgres_dba
bash -c "echo \"\\set dba '\\\\\\\\i $(pwd)/start.psql'\" >> ~/.psqlrc"
通过 psql 连接任意 PostgreSQL 服务端,输入 :dba 即可使用。
环境要求:psql 客户端版本 10 及以上,数据库服务端版本无此限制。建议使用最新版 psql 客户端,以获得最佳使用效果。
功能报表
综合信息(编号 0–3)
| 编号 | 报表内容 |
|---|---|
| 0 | 节点信息:主从角色、复制延迟、数据库占用空间、临时文件、预写日志、复制槽 |
| 1 | 数据库空间及统计信息 |
| 2 | 表与索引大小、数据行数统计 |
| 3 | 系统负载概况 |
活动与会话锁
| 编号 | 报表内容 |
|---|---|
| a1 | 按数据库、用户、会话状态分组展示当前连接 |
| l1 | 轻量级锁链路查询 |
| l2 | 含等待时长的锁链路查询(需 PostgreSQL 14+,依赖 pg_locks.waitstart) |
数据膨胀检测
| 编号 | 报表内容 |
|---|---|
| b1 | 数据表膨胀预估 |
| b2 | B 树索引膨胀预估 |
| b3 | 基于 pgstattuple 检测表膨胀(执行开销较高) |
| b4 | 基于 pgstattuple 检测 B 树索引膨胀(执行开销较高) |
| b5 | 缺失统计信息的数据表(无法评估膨胀情况) |
数据损坏检测(基于 amcheck 工具)
| 编号 | 锁类型 | 报表内容 |
|---|---|---|
| c1 | 共享访问锁 | 快速索引检测:支持 B 树、GIN 索引(需 PostgreSQL 18+),生产环境可安全使用 |
| c2 | 共享访问锁 | 索引 + 数据表 / TOAST 大字段检测(需 PostgreSQL 14+),运行安全,但会读取全量数据 |
| c3 | ⚠️ 共享锁 | B 树索引父节点检测,可识别字符集 / 系统库引发的数据损坏,建议仅在数据克隆环境使用 |
| c4 | ⚠️⚠️ 共享锁 | 全量检测:校验数据表、索引及父节点完整性,确保每条数据行都有对应索引 |
内存相关
| 编号 | 报表内容 |
|---|---|
| m1 | 缓冲区缓存详情(依赖 pg_buffercache,执行开销较高) |
索引管理
| 编号 | 报表内容 |
|---|---|
| i1 | 未使用及低频使用索引 |
| i2 | 冗余索引排查 |
| i3 | 外键缺失对应索引的检测 |
| i4 | 无效索引排查 |
| i5 | 索引清理语句生成(支持执行与回滚) |
自动清理(Vacuum)
| 编号 | 报表内容 |
|---|---|
| v1 | 实时 Vacuum 运行状态 |
| v2 | 自动清理进度与任务队列 |
任务进度
| 编号 | 报表内容 |
|---|---|
| p1 | CREATE INDEX(创建索引)/REINDEX(重建索引)进度 |
SQL 语句分析(基于 pg_stat_statements)
| 编号 | 报表内容 |
|---|---|
| s1 | 按总耗时排序的慢查询 |
| s2 | 完整 SQL 性能分析报表 |
| s3 | 按语句类型统计业务负载分布 |
参数调优与配置
| 编号 | 报表内容 |
|---|---|
| t1 | PostgreSQL 参数调优建议 |
| t2 | 自定义存储参数的数据库对象 |
| e1 | 已安装的扩展插件列表 |
| x1 | 数据对齐填充分析(实验性功能) |
| r1 | 生成随机密码并创建数据库用户 |
| r2 | 为已有用户重置随机密码 |
可选依赖扩展
部分报表需要额外安装扩展才能正常使用:
| 扩展名称 | 对应报表 | 安装 / 配置方式 |
|---|---|---|
pg_stat_statements |
s1、s2、s3 | 配置 shared_preload_libraries = 'pg_stat_statements' |
amcheck |
c1、c2、c3、c4 | 执行 CREATE EXTENSION amcheck; |
pgstattuple |
b3、b4 | 执行 CREATE EXTENSION pgstattuple; |
pg_buffercache |
m1 | 执行 CREATE EXTENSION pg_buffercache; |
版本兼容性
项目每次提交都会通过持续集成,在 PostgreSQL 13 ~ 18 版本中完成测试。9.6~12 旧版本可尝试使用,但不再做常态化测试。
支持 pg_monitor 角色权限,大部分报表无需超级管理员权限(数据损坏检测功能需要超级管理员,或手动授予执行权限)。
自定义报表
将后缀为 .sql 的文件放入 sql/ 目录即可添加自定义报表。文件命名规则:<编号>_<名称>.sql。
文件首行必须以 -- 开头添加功能描述,该描述会自动展示在功能菜单中。
# 新增/删除报表后,重新生成功能菜单
bash ./init/generate.sh
推荐工具:pspg
搭配 pspg 可大幅优化表格类输出的阅读体验:
\setenv PAGER pspg
\pset border 2
\pset linestyle unicode
参考
postgres_dba: https://github.com/NikolayS/postgres_dba.git