项目预览
项目数据
项目介绍
Star 增长趋势
本站每日记录该项目 GitHub 星标变化,观测越久曲线越完整
数据来源:GitHub API 逐日快照 · 收录于 2026-09-12 · 当前星标 ★ 1478
使用教程
环境要求
- 一个可连接的 PostgreSQL 实例(本地、容器或 RDS/Neon/Supabase 等托管库均可)
- 一个持有 pg_monitor 的只读登录角色(不能用超级用户)
- 执行 pgbot init 生成的 SQL 时需要 psql 客户端
- 使用脚本安装并强制验签时需要 PATH 中有 cosign(可选)
- Linux/macOS/Windows 均可,官方提供多平台预编译包
安装与启动步骤
-
1安装 pgbot
官方脚本方式最通用,会下载对应平台二进制并校验 SHA256 校验和;也可改用 Homebrew、go install 或 npx。
curl -fsSL https://pgbot.dev/install | sh -
2生成只读角色 SQL
pgbot init 只输出建角色与授权 SQL,自己不执行任何写操作,需你人工审阅后通过管道交给 psql 执行。
pgbot init "postgres://admin@host:5432/db" | psql "postgres://admin@host:5432/db" -
3验证角色可用
用刚创建的只读角色连接,确认它具有 pg_monitor 权限、能读取统计视图,避免后续报告数据不全。
pgbot init --verify "postgres://pgbot_ro:password@host:5432/db" -
4执行健康检查
传入连接串即可读取 Postgres 自带统计视图,输出 findings 优先的健康报告以及与上次相比的变化。
pgbot inspect "postgres://pgbot_ro:password@host:5432/db" -
5用环境变量传连接串
连接串优先取参数,其次 DATABASE_URL、PGBOT_DATABASE_URL、PGSERVICE;用环境变量可避免密码进入 ps 和历史记录。
export DATABASE_URL="postgres://pgbot_ro:password@host:5432/db?sslmode=require" pgbot inspect -
6用 Docker 运行
镜像为公开多架构(amd64/arm64)且免登录;连远程库无需特殊网络,建议通过环境变量传入 DSN。
export DATABASE_URL="postgres://pgbot_ro:password@yourdb.example.com:5432/db?sslmode=require" docker run --rm -e DATABASE_URL ghcr.io/pgrundev/pgbot inspect -
7手动建只读角色
若不想用 pgbot init,可自行以管理员身份执行这段 SQL 创建 pg_monitor 角色;只读边界来自这个角色而非命令行参数。
CREATE ROLE pgbot_ro LOGIN PASSWORD 'your_password'; GRANT pg_monitor TO pgbot_ro; GRANT CONNECT ON DATABASE yourdb TO pgbot_ro; -
8容器互连排查
pgbot 在主机、库在容器时用 127.0.0.1 加 docker ps 里的宿主端口;pgbot 也在容器时改用容器名加内部 5432 端口。
docker port mypg 5432 pgbot inspect "postgres://postgres:pw@127.0.0.1:6433/postgres?sslmode=disable"
关键配置
| 配置项 | 必填 | 说明 | 示例 |
|---|---|---|---|
DATABASE_URL | 否 | 连接串,未在命令行给出参数时优先读取 | postgres://pgbot_ro:password@host:5432/db?sslmode=require |
PGBOT_DATABASE_URL | 否 | DATABASE_URL 之后读取的备用连接串 | postgres://pgbot_ro:password@host:5432/db |
PGSERVICE | 否 | 使用 libpq 连接服务文件里的连接名,免写连接串 | mydb |
PGBOT_REQUIRE_SIGNATURE | 否 | 设为 1 时安装脚本强制校验 cosign 软件签名,失败即中止 | 1 |
如何确认成功
pgbot inspect 能输出健康报告即连接与权限正常;pgbot init --verify 无报错说明只读角色配置可用。
常见问题
Q:为什么不能用超级用户连接?
A:只读保证来自角色而非参数。pgbot 建议用持有 pg_monitor 的登录角色读统计视图,该角色没有任何写权限,把权限边界交给数据库本身。
Q:npx pgbot 报 E404 怎么办?
A:包名是 scoped 的,裸名 pgbot 因与 got 过于相似被 npm 的名称近似规则拦截,必须写成 npx @pgbot/cli。
Q:连 Docker 里的 Postgres 为什么卡住约 10 秒?
A:localhost 会先解析为 IPv6 ::1,Docker Desktop 不转发它。改用 127.0.0.1 加上 docker ps 里看到的宿主端口即可。
Q:pgbot 会不会改动我的数据库?
A:不会。它不建扩展、不建表、不建角色、不写数据,每个会话都固定为只读并设置超时,查询包在 BEGIN READ ONLY 事务里。
注意事项
- 只读边界是数据库角色,pgbot 只是在此基础上再加 default_transaction_read_only、statement_timeout=15s、lock_timeout=2s 等纵深防御。
- 连接串优先取命令行参数,其次 DATABASE_URL、PGBOT_DATABASE_URL,最后 PGSERVICE。
- 托管数据库或 CI 场景建议用环境变量传 DSN,让密码不出现在 ps 输出和 shell 历史里。
- 卸载只需删除 pgbot 可执行文件与本地基线目录 ${XDG_STATE_HOME:-$HOME/.local/state}/pgbot,没有守护进程或数据库残留。
核心亮点
- 自动抽取表结构和元数据,Agent 无需人工提供 schema 即可理解数据库
- 自然语言转 SQL 并执行,把数据库变成可对话的数据源
- Go 实现、部署轻量,可直接连接现有 Postgres 无需迁移数据
不足之处
- 项目较新,文档和社区生态仍在早期,复杂 schema 下的准确率待验证
- 自然语言转 SQL 的权限与安全控制细节需自行评估
适用场景
- AI Agent 需要查询业务数据库时,用自然语言直接取数
- 数据分析师用对话方式对 Postgres 做即席查询和报表
- 内部工具或客服系统接入数据库,自动回答数据类问题
替代项目
vanna、sqlcoder、postgres-mcp
上一篇:superserve
下一篇:pandaprobe
同类项目推荐
mlops.toys
开源
一站式逛遍 MLOps 工具,快速选型不迷路
A curated list of MLOps projects, tools and resources
xberg
开源
一个库解析百种文档,支持多语言调用,省去格式适配烦恼。
The fast, precise document-intelligence engine for every language: text, tables and ···
FlexLLMGen
开源
单卡跑大模型,吞吐量翻倍,省钱又高效
Running large language models on a single GPU for throughput-oriented scenarios.
kronotop
开源
用 FoundationDB 撑起的强一致文档库,还带 AI 记忆检索
Distributed, transactional document database backed by FoundationDB.
vLLM-Moet
开源
消费级 Blackwell 上跑 2-bit MoE,画质对齐官方 FP4
A vLLM patch + hand‑written SM120 SASS kernels: 2‑bit MoE experts + an FP4 "delta"···
sagemaker-genai-hosting-examples
开源
照着 Notebook 跑通大模型托管与推理
ultracontext
开源
自动抓取并共享智能体上下文,让多智能体协作不再各说各话。
Open Source Context infrastructure for AI agents. Auto-capture and share your agents···
mlops-project
开源
一键搭建MLOps流水线,让模型上线快人一步
llama3.java
开源
纯 Java 跑 Llama 3,不装 Python 也能本地推理
Llama 3+ inference in pure Java
