为什么需要 Postgres MCP
数据工作流的痛点:
你:帮我查上周销售额按品类拆分
传统流程:
1. 切到 SQL 客户端
2. 查表结构(有哪些字段)
3. 写 SQL
4. 执行,复制结果
5. 切回 AI 对话,贴结果
6. AI 分析
→ 6 步,5 次应用切换
Postgres MCP:
你:帮我查上周销售额按品类拆分
AI:
1. 自动查表结构
2. 生成 SQL
3. 直接执行
4. 分析结果
5. 一句话回答
→ 1 步,0 次切换
Postgres MCP 把数据库变成 AI 的"原生能力",让自然语言到数据的距离归零。
核心能力
| 能力 | 工具名 | 说明 |
|---|---|---|
| 列出表 | list_tables | 获取所有表名 |
| 表结构 | describe_table | 查看字段、类型、注释 |
| 执行 SQL | execute_sql | 运行只读或写 SQL |
| 只读查询 | read_query | 仅 SELECT,安全 |
| 写操作 | write_query | INSERT/UPDATE/DELETE |
| Schema 探索 | list_schemas | 列出所有 schema |
安装与配置
Step 1:准备数据库
确保 Postgres 可访问,准备一个专用账号(不要用 root):
-- 创建只读账号(推荐)
CREATE USER mcp_reader WITH PASSWORD 'strong_password';
GRANT USAGE ON SCHEMA public TO mcp_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_reader;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO mcp_reader;
-- 如需写权限(高风险,慎用)
CREATE USER mcp_writer WITH PASSWORD 'strong_password';
GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO mcp_writer;
Step 2:各客户端配置
Claude Desktop
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": {
"POSTGRES_CONNECTION_STRING": "postgresql://mcp_reader:strong_password@host:5432/dbname"
}
}
}
}
Cursor / VS Code Continue
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": {
"POSTGRES_CONNECTION_STRING": "postgresql://mcp_reader:strong_password@host:5432/dbname"
}
}
}
}
Step 3:验证
重启客户端,输入:
列出数据库里所有的表
AI 调用 list_tables 返回表清单,确认配置成功。
五个实战场景
场景 1:自然语言查数
你:上周各品类的销售额,按降序排
AI:
1. describe_table orders → 确认字段(category, amount, created_at)
2. 生成 SQL:
SELECT category, SUM(amount) AS total
FROM orders
WHERE created_at >= NOW() - INTERVAL '7 days'
GROUP BY category
ORDER BY total DESC
3. execute_sql → 拿到结果
4. 输出:
| 品类 | 销售额 |
| 服饰 | ¥128,500 |
| 数码 | ¥98,200 |
| 食品 | ¥45,800 |
场景 2:Schema 探索
你:我刚接手这个库,帮我理清核心表关系
AI:
1. list_tables → 找到 15 张表
2. 对每张 describe_table → 抓外键
3. 输出关系图:
users ─┬─ orders ──── order_items ── products
└─ addresses └─ categories
关键字段标注 + 表用途一句话总结
场景 3:数据校验
你:检查 users 表里有没有重复邮箱
AI:
1. 生成校验 SQL:
SELECT email, COUNT(*) AS cnt
FROM users
GROUP BY email
HAVING COUNT(*) > 1
2. execute_sql
3. 输出:发现 3 个重复邮箱,列出明细
4. 建议修复 SQL(但不执行,需你确认)
场景 4:报表生成
配合 Filesystem MCP 把查询结果落盘:
你:生成本月销售周报,存到 /reports/ 下
AI:
1. 查本月数据(4 周)
2. 算环比、同比
3. 生成 Markdown 报表
4. 用 Filesystem MCP 写到 /reports/2026-08.md
→ 直接交付成品文件
场景 5:慢查询分析
你:最近 orders 表查询慢,帮我分析
AI:
1. 查 pg_stat_statements:
SELECT query, calls, mean_exec_time, total_time
FROM pg_stat_statements
WHERE query LIKE '%orders%'
ORDER BY total_time DESC LIMIT 5
2. describe_table orders → 看索引
3. 定位:某查询没命中索引
4. 建议:CREATE INDEX idx_orders_status_date ON orders(status, created_at)
5. 给出执行计划对比(EXPLAIN ANALYZE)
权限管控要点
1. 只读优先
✓ 用 mcp_reader 账号(仅 SELECT)
✗ 用 mcp_writer 账号日常用 → 误删数据风险
2. 写操作二次确认
AI 生成的 UPDATE/DELETE:
→ 不直接执行
→ 先 SELECT WHERE 同条件预览影响行
→ 用户确认后再 write_query
Step 3 在 system prompt 中加规则:
你连的是生产库。规则:
1. 任何写操作前必须先用 SELECT 预览影响行
2. DELETE 必须带 LIMIT
3. 不执行 DROP/TRUNCATE
4. 大批量写(>100 行)需用户确认
3. 敏感字段脱敏
✗ AI 查 users 表把 password_hash、手机号全输出
✓ system prompt 加规则:输出前脱敏 phone(显示 138****1234)、隐藏 password 类字段
4. 连接隔离
✗ 一个 MCP 连接既读生产又读测试 → 容易搞混
✓ 生产/测试用不同 MCP 配置,命名清晰
注意事项
1. 连接池
MCP server 默认单连接,高并发会阻塞。生产环境需配连接池(如 PgBouncer)。
2. 查询超时
✗ AI 生成的 SQL 跑了 10 分钟没回来 → 卡住
✓ 在连接串加 statement_timeout:
postgresql://user:pass@host/db?options=-c%20statement_timeout%3D30000
(30 秒超时)
3. 大结果集
✗ SELECT * FROM logs → 1000 万行 → 内存爆
✓ system prompt 加规则:默认 LIMIT 100,需全量时用户确认
4. 事务边界
AI 多次 write_query 不是一个事务 → 中途失败留下脏数据
解决:复杂写操作让 AI 生成完整 SQL 脚本,一次性执行
5. 注释依赖
✗ 字段名 user_id1、flag2 → AI 猜不出含义
✓ 字段加 COMMENT ON COLUMN → AI 能读懂
COMMENT ON COLUMN orders.status IS '订单状态:pending/paid/shipped/done'
与直接用 SQL 的区别
| 维度 | Postgres MCP | 直接写 SQL |
|---|---|---|
| 入门门槛 | 自然语言 | 学 SQL |
| 探索速度 | 快(自动理 schema) | 慢 |
| 适合场景 | 临时分析、探索 | 高频报表 |
| 可控性 | 中 | 高 |
| 上线建议 | 探索用 MCP,生产报表用 SQL |
与其他 MCP 的协作
| 组合 | 场景 |
|---|---|
| Postgres + Filesystem | 查询结果写文件 |
| Postgres + Slack | 数据异常通知团队 |
| Postgres + GitLab | 数据问题追溯代码 |
| Postgres + Memory MCP | 记住常用查询模板 |
小结
Postgres MCP 把数据库从"需要切应用才能用"变成 AI 的原生能力,让自然语言到数据的距离归零。
记住一个安全原则:只读账号日常用,写操作必须二次确认。配合 Filesystem MCP 落盘、Slack MCP 通知,你能搭一个从数据到决策到交付的全自动数据助手。