
【免费下载链接】pgbotPostgres intelligence for ai agents项目地址https://gitcode.com/gh_mirrors/pgb/pgbot点击查看免费下载pgbot 是一款面向 PostgreSQL 的只读数据库诊断工具一个静态二进制像psql一样通过标准协议连接托管数据库RDS、Aurora、Neon、Supabase读取数据库自身的统计视图输出发现项优先的健康报告。它不在数据库上安装任何东西全程无写权限——这正是它敢直接连生产库的原因。本文带你从零理解 pgbot 的连接模型并逐一拆解 RDS、Aurora、Neon、Supabase 四大托管平台的连接要点与排障方法。连接模型pgbot 只是一个客户端 很多新手的第一反应是我要在 RDS 实例上装个 agent——不需要。pgbot 是纯客户端运行位置可以是你的笔记本公开端点的 RDS / Neon / Supabase与数据库同 VPC 的一台 EC2CI 流水线一台堡垒机 / 跳板机连接后它做三件关键的事见 internal/conn/connect.go能力探测一次往返读出服务器版本、扩展、角色权限、平台标记连接池封顶 4 条每次探测都是独立的BEGIN READ ONLY … COMMIT短事务并固定statement_timeout15s、lock_timeout2s——诊断工具绝不能变成它要诊断的事故只读身份真正保证只读的是pg_monitor只读角色会话参数只是纵深防御。平台是如何被自动识别的pgbot 不需要你手动声明这是 RDS。它的检测逻辑internal/conn/provider.go综合三路信号信号示例主机名特征supabase、neon.tech、rds.amazonaws.comversion()文本含aurorapg_settings厂商标记rds.*、cloudsql.*、azure.*、aurora_version()第三条信号意味着即使主机是裸 IP 或藏在代理后面检测依然有效。识别结果直接决定后续的排障建议缺pg_stat_statements时pgbot 会打印你所在平台的专属开启步骤而不是一句泛泛的请安装扩展。想确认检测结论随时可以执行pgbot inspect $DATABASE_URL --json | jq .server第一次运行inspect 快速上手npx pgbot/cli inspect postgres://pgbot_rohost:5432/db?sslmoderequire推荐把连接串放进环境变量密码不进入 shell 历史和ps输出export DATABASE_URLpostgres://pgbot_ro:…host:5432/db?sslmoderequire pgbot inspect默认报告是一条分级体检四行生命体征仪表缓存命中、锁等待、回滚、闲置索引、一行checked列出核查通过的系统、一个健康分再按 CRITICAL / WARNING / NOTE 分桶列出发现项。退出码是脚本化契约对接 CI 时记住它0正常 ·1警告 ·2严重 ·3连接/执行失败 ·64参数错误。也就是说连不上库本身就是 exit 3你的流水线能立刻区分库有病和连不上。RDS 连接排障三种接入方式私有 RDS生产库的常态RDS 实例没有 OS 权限无法装任何东西所以答案永远是从一个能触达它的位置运行 pgbot方式适用场景要点✅ 同 VPC 的 EC2推荐私有实例走 AWS 内网数据库无需公网访问唯一规则是安全组放行 EC2 的5432--ssh-tunnel跳板机不想开 EC2见下文私有网络一步接入笔记本直连公开实例安全组允许你的 IP 即可# 在同 VPC 的 EC2 上或公开实例的笔记本上 pgbot inspect postgres://pgbot_romydb.abc123.us-east-1.rds.amazonaws.com:5432/appdb?sslmoderequire授权与开启 pg_stat_statementspg_monitorRDS 不开放 OS superuser但用主用户rds_superuser执行GRANT pg_monitor TO role;完全可行——这就是 pgbot 的全部所需。pg_stat_statements把pg_stat_statements加入DB 参数组的shared_preload_libraries重启实例再CREATE EXTENSION pg_stat_statements;。缺了它只会让 queries 部分降级其他检查照常进行。诚实的边界CPU / 内存 / 磁盘 IOPS 这类主机指标住在 CloudWatch 里SQL 连接够不到——这是托管数据库的普遍边界不是 pgbot 的缺陷。除此之外的检查查询、索引、锁、复制、检查点、连接、配置全部可用。加--full会得到一张子系统状态板每个子系统一行ok / warn / fail一目了然fail 行直接点名根因比如锁等待 61%4f2a 被 91c 阻塞。Aurora 集群一次体检全部实例 ⚡Aurora 有个新手容易踩的坑集群端点背后是多个实例一个 writer N 个 reader任意一个实例上的pg_stat_*都代表不了其他实例。只连集群端点检查一次可能漏掉 reader 上的问题。pgbot inspect $CLUSTER_URL --all-instances解决它internal/conn/aurora.go用aurora_replica_status()列出集群成员writer 排第一从集群端点的 DNS 名推导出每个实例的端点支持cluster-、cluster-ro-、cluster-custom-前缀自定义域名会跟随 CNAME 链解析到真实 RDS 名用aurora_db_instance_identifier()核验每个推导出的端点确实到达了它声称的那个成员——不猜测逐个实例体检同一套凭据与 TLS 设置。整个过程只需要 SQL 和 DNS不需要 AWS 凭据、CLI、SDK 或 API。它还会拒绝无法推导的端点如 RDS Proxy——成员藏在代理后面任何成员不可达都会报部分覆盖并以 exit 3 退出而不是假装全部检查过。上图正是多实例场景下的重要提醒在 writer 上零扫描的索引reader 可能还在用——扫描计数是每节点的。pgbot 会在indexes输出里主动带上这条先别删的警告。Neon 连接排障pooler、channel_binding 与冷窗口pgbot inspect postgres://user:passep-xxx.region.aws.neon.tech/dbname?sslmoderequireNeon 上有三个新手最常遇到的现象pgbot 都已经内置处理现象pgbot 的行为默认连接串带-pooler主机后缀PgBouncer 事务池自动检测并继续附一行说明追求会话级确定性可用去掉-pooler的直连主机默认串带channel_bindingrequire自动忽略驱动不做 SCRAM 通道绑定并在 stderr 说明sslmode的 TLS 依然生效不会报错中断Scale-to-zero闲置后计算层挂起统计清零冷窗口保护见下冷窗口cold window是 Neon 排障的核心概念。计算层挂起再唤醒后pg_stat_statements历史、缓存命中计数、索引扫描数全部从 0 开始。如果 pgbot 照搬旧逻辑计数器从 40M 掉到 12k 会被误报成−99.97% 的性能回归。pgbot 的做法是降级而不是说谎阈值定义在 internal/model/context.go 的ColdWindowThresholdSeconds即 15 分钟统计被重置后deltas整节被抑制并附原因——从 40M 到 12k 是唤醒不是 −99.97%窗口不足 15 分钟时基于计数器的发现项闲置索引、缓存命中、顺序扫描偏重被抑制但即时有效的仪表阻塞链、idle-in-transaction、复制延迟、无效索引照常报告报告头会直白地写明窗口年龄。想拿到连续历史关闭 scale-to-zero 或调大挂起超时让统计在两次运行之间存活。pg_stat_statements在 Neon 上已预加载一条CREATE EXTENSION pg_stat_statements;即可。Supabase 连接排障直连端点优先Supabase 给你两种连接串排障前先分清# 直连端点会话级pgbot 首选 pgbot inspect postgres://postgres:passdb.ref.supabase.co:5432/postgres?sslmoderequire # 池化端点Supavisor 事务池端口 6543——也可以pgbot 会标注并继续 pgbot inspect postgres://postgres.ref:passaws-0-region.pooler.supabase.com:6543/postgres?sslmoderequire默认连接串走:6543池化端点。pgbot 检测到端口 6543 会自动识别并附注需要会话级确定性时加--strict-pooler它会拒绝池化端点并告诉你改用哪个。为什么池化端点也能出正确速率每个计数器都在自己的事务里读取而pg_stat_*是集群级共享内存——哪个后端应答读都无关紧要实现见 internal/conn/pooler.go。Supabase 不发放 superuser内置postgres角色已有较宽的读权限允许的地方也可以给专用角色授pg_monitor。pg_stat_statements同样已预加载。免费层闲置后会暂停实例——暂停后的首次运行请当作冷窗口看待。连接排障速查表 症状根因解法exit 3连接失败安全组 / 白名单 / 端点不可达私有库用同 VPC EC2 或--ssh-tunnel公开库放行 IPqueries section unavailable缺pg_stat_statements按平台步骤开启RDS/Aurora 改参数组 重启Neon/Supabase 仅CREATE EXTENSION发现项偏少、会话缺失角色缺pg_monitor用管理角色GRANT pg_monitor TO role;pgbot 在连接时会直接告诉你缺哪条 GRANTdeltas 缺失统计被重置 / 服务器重启 / scale-to-zeroNeon 冷窗口属预期行为pgbot 会抑制而非误报Neon 连接报 channel_binding 相关错误驱动不支持通道绑定无需处理——新版 pgbot 自动忽略该参数Docker 本机连接卡 ~10slocalhost先解析到 IPv6用127.0.0.1托管平台不受影响私有网络一步接入--ssh-tunnelVPC 里的 RDS、堡垒机后面的 Postgres用--ssh-tunnel一步到位pgbot inspect postgres://pgbot_rodb.internal:5432/appdb?sslmodeverify-full \ --ssh-tunnel bastion.example.com # 或 userhost:port或 ~/.ssh/config 别名--ssh-tunnel是全局参数所有会建连的命令都认它$PGBOT_SSH_TUNNEL环境变量可为整个会话设置internal/conn/sshtunnel.go。它不是ssh -L端口转发而是驱动层的 DialFuncDSN 里保留真实主机名sslmodeverify-full依然对真实主机名校验证书.pgpass照常匹配本机不开放任何端口。跳板机如何连上User、Port、IdentityFile、StrictHostKeyChecking…全部读你现有的ssh_config裸别名直接可用主机密钥的验证方式和你的ssh完全一致链路慢就调大--timeout。可选让 AI 读懂报告 export OPENAI_API_KEYsk-… # 或 GEMINI / ANTHROPIC / XAI 任一密钥 pgbot ask why is it slow?注意分工发现项永远由 Go 代码确定性计算模型只负责解释与排序并且被要求把每一条 caveat 带进建议比如复制处于活动状态先别删这个零扫描索引。所有确定性命令inspect、indexes、queries…不需要任何密钥数据不出本机。收尾验证你的配置 ✅pgbot init $DATABASE_URL # 生成只读角色 SQL含平台专属 pg_stat_statements 步骤只打印不执行 pgbot init --verify $DATABASE_URL # 连上后核验角色权限是否齐备init会先探测你的平台再生成量身定制的 SQL——Neon/Supabase 只需一条CREATE EXTENSIONRDS 则给出参数组 重启的完整步骤实现见 cmd/pgbot/init.go。各平台的完整能力矩阵谁能授pg_monitor、统计能否跨闲置存活、连接池默认端口……详见 docs/providers.md每条发现项都有离线可读的说明页pgbot explain-finding id即可查阅目录在 docs/findings/。一句话总结pgbot 连不上托管库多半不是工具的问题而是从哪连、用什么角色、统计怎么开这三件事——本文的速查表和分平台步骤把它们逐一变成了确定动作。赞分享【免费下载链接】pgbotPostgres intelligence for ai agents项目地址https://gitcode.com/gh_mirrors/pgb/pgbot点击查看免费下载相关推荐终极指南如何用Zappa优化RDS与Aurora数据库连接性能终极指南如何用Zappa优化RDS与Aurora数据库连接性能 Zappa是一个基于Python的服务部署和管理工具支持多种云服务和部署选项。它提供简单易用云原生DevOps后端DotNetNext/SqlSugar数据库连接池故障诊断DotNetNext/SqlSugar数据库连接池故障诊断 引言 数据库连接池是现代应用开发中的关键组件它通过复用数据库连接来提升性能并减少资源消耗。在使用D数据库ORM后端3分钟定位数据库连接问题DBeaver故障诊断完全指南3分钟定位数据库连接问题DBeaver故障诊断完全指南 你是否还在为数据库连接失败而反复检查密码是否遇到过连接超时却找不到原因的情况本文将通过DBea数据库客户端桌面应用数据库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考