
pgbot
让 AI 直接读懂你的 Postgres,问句话就出数据洞察
pgbot 是一个用 Go 编写的 PostgreSQL 智能层,专为 AI Agent 和应用设计。它把数据库从被动的存储变成可主动查询、分析和推理的数据源,解决 AI 应用直接写 SQL 时面临的 schema 理解难、查询易出错、结果难解释等问题。核心能力包括:自动感知数据库表结构与元数据,让 Agent 无需人工喂 schema 就能理解数据;把自然语言问题转成安全可执行的 SQL 查询;对查询结果做聚合、统计与解释,输出结构化洞察;支持连接现有 Postgres 实例,无需迁移数据。它面向需要让 AI 直接与业务数据库交互的团队,降低把数据库接入 Agent 工作流的工程成本,适合数据分析、报表问答、智能运维等场景。项目用 Go 实现,部署轻量,可作为独立服务或嵌入应用,是 Postgres 生态里面向 AI 时代的基础设施组件。
项目数据
使用教程
环境要求
- 一个可连接的 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
同类项目推荐
freebuff-proxy
开源
聚合多账号,一键接入 OpenAI 兼容 API,轻松管理会话。
OpenAI-compatible gateway for FreeBuff coding models. Token pool, session lifecycle,···
microduck
开源
用 Rust 造一只会走路的桌面小鸭,快速上手双足机器人。
A Tiny biped duck robot
soperator
开源
用 Kubernetes 原生方式运行 Slurm,简化 HPC 集群管理。
Run Slurm in Kubernetes
ollama
开源
一条命令本地跑起大模型,免费、私密、不卡顿
Get up and running with Kimi, GLM, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other···