| name | pg-host-resource-risk |
| description | 对 PostgreSQL 数据库所在服务器进行物理资源风险评估,涵盖磁盘剩余空间、OOM 风险(服务器整体及 PG 进程级内存分析并关联数据库内部视图)、IO 设备使用率及等待、网络带宽使用率四大维度。触发场景包括:磁盘要满了、磁盘空间不足、OOM、内存不够、内存泄漏、进程吃内存、IO 打满、IO 等待高、iostat 告警、网络带宽跑满、服务器资源评估、主机巡检、物理资源体检、容量风险排查等。即使用户只说'帮我看看数据库服务器还撑得住吗'或'这台机器是不是快扛不住了',也应触发本技能。支持本地直接执行或通过 SSH 远程执行,自动判断执行环境。 |
| tags | ["PostgreSQL","运行时服务器潜在风险分析","剩余空间预警","OOM预警","内存预警","IOPS预警","IO等待预警","IO带宽预警","网络带宽预警"] |
| platform | ["claude-code","cursor"] |
| author | digoal |
| version | 1.0.0 |
| license | GNU General Public License v2.0 |
| homepage | https://github.com/digoal/skills |
PG 主机资源风险评估 (pg-host-resource-risk)
对 PostgreSQL 所在服务器做一次只读体检:磁盘、内存(OOM)、IO、网络四个维度,每个维度都要把 OS 层现象关联回数据库内部视图,定位到具体目录/进程/SQL/复制槽/应用,最终产出一份分级的中文风险报告。
前置要求
- 数据库连接:通过环境变量
PGPASSWORD 提供密码,禁止在命令行明文传递密码。其余连接参数(PGHOST/PGPORT/PGUSER/PGDATABASE)按需设置。
- OS 命令:
df, free, ps, cat /proc/meminfo 为必需,均为系统自带。iostat/sar(sysstat 包)、iftop/nload 为可选增强,缺失时跳过对应分析并在报告中注明局限性。
- 如需远程执行:用户提供 SSH 连接信息(主机、端口、用户名、密码或密钥路径)。所有远程命令仅通过标准
ssh 调用只读命令,不落地密码到磁盘、不写 shell 历史。
- 所有 SQL 一律只读,会话开头执行
SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;,严禁 INSERT/UPDATE/DELETE/DDL。
- 所有 OS 操作只读(df/free/ps/iostat/sar/cat/iftop 等),严禁 rm/kill/reboot/系统参数修改等破坏性操作。
工作流程
Step 0:连接数据库并采集基础信息
执行 references/sql_queries.sql 中「Step0 基础信息」段:实例版本、启动时间、data_directory、内存相关参数(max_connections/shared_buffers/work_mem/maintenance_work_mem/effective_cache_size)、inet_server_addr()、当前活跃会话列表、pg_tablespace 中的自定义表空间路径。
Step 1:判断执行环境(本地 or 远程)
运行 scripts/env_detect.sh:
- 本地执行
hostname -I 与 whoami,比对本地 IP 与 Step 0 中 inet_server_addr() 是否匹配;
- 检查本地是否存在正在运行的
postgres 主进程(ps aux | grep '[p]ostgres')。
若两个条件均满足 → 判定为「本地模式」,后续所有 OS 命令直接本地执行。
否则 → 判定为「远程模式」,向用户输出:
检测到当前执行环境不是数据库服务器。请提供服务器的 SSH 连接信息(主机、端口、用户名、密码或密钥路径),以便进行物理资源扫描。
收到 SSH 信息后,后续所有 scripts/*.sh 均通过 ssh <user>@<host> -p <port> 'bash -s' < script.sh 的方式在远端执行,密码类连接信息只在当次会话内存中使用,不写入文件。
Step 2:磁盘剩余空间预警
运行 scripts/disk_check.sh(传入 $PGDATA、WAL 目录、日志目录、/tmp、表空间路径列表、/):
- 输出
df -h 全量挂载点及关注目录的剩余空间/使用率。
- 对判定为告警的目录,执行
du -ah <dir> --max-depth=3 | sort -rh | head -20 定位大文件。
分级标准(对每个关注目录独立判定):