🚀进阶MCP协议接入PostgreSQL MCP

Claude Code 接入 PostgreSQL MCP 完整指南

手把手教你在 Claude Code 中接入 PostgreSQL MCP Server,让 AI 直接读取库表结构、执行只读查询、生成报表与优化 SQL

教程团队
2026-09-08
5 个步骤

前置条件

  • 1已安装 Node.js 18 及以上版本(提供 npx 命令)
  • 2已安装 Claude Code CLI(claude 命令可用)
  • 3有一个可连接的 PostgreSQL 数据库(本地或远程均可)
  • 4拥有数据库管理员权限,能创建只读账号

Claude Code 接入 PostgreSQL MCP 完整指南

本教程将带你把 PostgreSQL MCP Server 接入 Claude Code,让 AI 能够直接读取你的数据库结构、执行只读查询、生成报表 SQL 并给出索引优化建议。

配置完成后,你不再需要手动导出 CSV、粘贴建表语句、截图结果集——直接用自然语言描述需求,Claude 会自己去看表、写 SQL、跑查询、解释结果。

为什么要用 MCP 直连数据库

在写代码或排查线上问题时,最常见的卡点是「AI 不知道你的表长什么样」。传统做法与 MCP 方案的对比:

环节传统做法接入 PostgreSQL MCP 后
让 AI 了解表结构手动复制建表 DDL 粘贴给 AIAI 自己读取 schema,零手工搬运
写业务查询人工描述字段,AI 猜字段类型AI 按真实字段与类型写 SQL
验证 SQL 正确性自己复制到数据库客户端执行AI 直接执行并返回结果集
排查数据问题反复在客户端和对话框之间切换一次对话内完成查数、归因、给结论
索引优化凭经验判断结合 pg_stat 统计信息给出建议

MCP(Model Context Protocol)本质是一套标准协议,让 AI 客户端以统一方式调用外部工具。数据库是它最适合落地的场景之一。

步骤一:检查运行环境

在开始配置前,先确认四个命令都能正常输出。

bash
1node -v          # 建议 v18 及以上
2npx -v           # Node 自带,用于拉取 MCP Server
3claude --version # 确认 Claude Code CLI 已安装
4pg_isready -h localhost -p 5432   # 确认数据库可连通,正常返回 accepting connections

提示

💡 提示:如果 claude 命令不存在,先执行 npm install -g @anthropic-ai/claude-code 安装 Claude Code,安装后用 claude login 完成授权。

步骤二:创建专用的只读数据库账号

这一步是整套方案的安全基石:永远不要用 superuser 或应用主账号连接 MCP。

用管理员账号登录数据库,创建一个只能读、不能写的专用角色:

sql
1-- 1. 创建只读角色(请替换为强密码)
2CREATE ROLE claude_readonly LOGIN PASSWORD '换成强密码';
3
4-- 2. 允许连接目标库
5GRANT CONNECT ON DATABASE mydb TO claude_readonly;
6
7-- 3. 允许读取 public schema
8GRANT USAGE ON SCHEMA public TO claude_readonly;
9
10-- 4. 授予现有所有表的只读权限
11GRANT SELECT ON ALL TABLES IN SCHEMA public TO claude_readonly;
12
13-- 5. 未来新建的表也自动可读,避免以后反复授权
14ALTER DEFAULT PRIVILEGES IN SCHEMA public
15  GRANT SELECT ON TABLES TO claude_readonly;

验证只读是否生效:

bash
1psql "postgresql://claude_readonly:你的密码@localhost:5432/mydb" -c "\dt"

警告

⚠️ 警告:如果是生产库,强烈建议连接到只读副本(read replica)或脱敏后的 staging 库,而不是主库。AI 执行的是真实查询,一个没加 LIMIT 的全表扫描就可能拖慢线上业务。

步骤三:注册 PostgreSQL MCP Server

推荐用命令行添加,无需手工编辑配置文件。

bash
1claude mcp add postgres -s user -- \
2  npx -y @modelcontextprotocol/server-postgres \
3  "postgresql://claude_readonly:你的密码@localhost:5432/mydb"

命令拆解:

  • postgres — 这个 MCP Server 在本机的名字,后面 /mcp 里显示的就是它
  • -s user — 作用域,可选 local(当前项目,默认)、project(写入 .mcp.json 随仓库共享)、user(当前用户全局可用)
  • -- — 分隔符,后面的内容全部当作启动命令
  • 最后一段是数据库连接串

三种作用域怎么选

作用域写入位置适用场景
local本地会话配置个人临时调试,不进版本库
project项目根目录 .mcp.json团队共享同一套数据源配置
user用户级配置所有项目共用的个人数据库

提示

💡 提示:连接串里带明文密码,用 -s project 时务必确认 .mcp.json 已加入 .gitignore,否则密码会进版本库。更稳妥的做法是把连接串放进环境变量,配置里引用 ${POSTGRES_DSN}。

如果偏好手写配置,等价的 .mcp.json 写法如下:

json
1{
2  "mcpServers": {
3    "postgres": {
4      "command": "npx",
5      "args": [
6        "-y",
7        "@modelcontextprotocol/server-postgres",
8        "postgresql://claude_readonly:你的密码@localhost:5432/mydb"
9      ]
10    }
11  }
12}

远程数据库需要 SSL 时,在连接串末尾追加参数:

bash
1postgresql://claude_readonly:密码@db.example.com:5432/mydb?sslmode=require

步骤四:验证连接状态

bash
1claude mcp list

启动 Claude Code 并进入交互界面,输入 /mcp 查看所有 MCP Server 的实时状态。

成功

✅ 成功标志:postgres 后面显示 connected,并能看到它提供的 query 工具。若显示 failed,说明连接串或网络有问题,先回到步骤二用 psql 手工验证一遍。

步骤五:第一次提问

现在直接用自然语言提问,Claude 会自己调用 MCP 工具去探索数据库:

帮我看一下 public schema 下有哪些表,挑出订单相关的表,说明它的字段、类型和索引

接入后可以稳定使用的四类能力:

能力说明
列出表自动枚举指定 schema 下的所有表
读取表结构返回字段名、类型、是否可空、注释
执行只读查询运行 SELECT 语句并返回结果集
结构分析基于真实数据给出索引与查询优化建议

场景应用示例

场景1:自动生成业务报表

使用示例:

统计最近 30 天每天的订单量和 GMV,按日期升序输出,并标出环比下跌超过 30% 的日期

预期效果:

  • 自动识别订单表的时间字段与金额字段类型
  • 生成带 date_trunc 的分组聚合 SQL 并执行
  • 用窗口函数计算环比,直接标出异常日期
  • 结果以表格形式返回,并附上可能的归因分析

场景2:慢查询与索引优化

使用示例:

text
1这条 SQL 跑了 8 秒,帮我看看执行计划,给出索引优化建议:
2SELECT * FROM orders WHERE user_id = 123 AND status = 'paid' ORDER BY created_at DESC LIMIT 20;

预期效果:

  • 读取目标表的现有索引定义
  • 基于字段选择性判断应建复合索引及字段顺序
  • 给出可直接执行的 CREATE INDEX 语句
  • 说明索引带来的写入代价,避免盲目加索引

场景3:数据核对与异常排查

使用示例:

orders 表和 payments 表按 order_id 关联,帮我找出有订单但没有支付记录的脏数据,统计数量并列出前 10 条

预期效果:

  • 自动判断两表的关联字段与外键关系
  • 用 LEFT JOIN 或 NOT EXISTS 找出缺失记录
  • 返回数量统计与样本数据
  • 给出数据补全或清理的建议方案

场景4:把表结构转成代码

使用示例:

读一下 users 表的结构,帮我生成对应的 TypeScript 类型定义和一个带分页的查询函数

预期效果:

  • 精确映射 Postgres 类型到 TypeScript(含可空字段)
  • 生成完整的 interface 定义与分页查询函数
  • 自动补上参数校验与总条数统计
  • 代码可直接复制到项目中使用

安全红线

数据库接入 AI 是强能力,也是高风险操作,以下五条建议务必遵守:

风险正确做法
账号权限过大使用 SELECT-only 的专用账号,绝不用 superuser
直连生产主库连只读副本或 staging 库,隔离线上流量
密码进版本库.mcp.json 加 .gitignore,或用环境变量注入
全表扫描拖垮库提问时明确时间范围,要求 AI 查询必须带 LIMIT
敏感数据外泄手机号、身份证等字段在库层做视图脱敏后再授权

警告

⚠️ 警告:官方的 @modelcontextprotocol/server-postgres 只提供只读查询,任何写操作都会被拒绝。这是刻意的安全设计,不要为了图方便替换成可执行写操作的第三方 server。

常见问题排查

问题现象可能原因解决方案
Failed to connect连接串错误或数据库未启动用 psql 手工验证同一连接串
spawn npx ENOENTNode.js 未安装或不在 PATH重装 Node.js 并重启终端
password authentication failed密码错误或 pg_hba.conf 未放行检查密码,确认客户端 IP 在白名单
看不到任何表缺少 USAGE 或 SELECT 授权补执行 GRANT 语句并确认 schema 名
SSL required云厂商强制 SSL连接串追加 ?sslmode=require
查询长时间无响应全表扫描或锁等待加时间范围与 LIMIT,避开业务高峰

进阶玩法

  • 多数据源并行:用不同名字添加多个 server(如 postgres_orders、postgres_users),Claude 会在同一轮对话中自动选择对应数据源
  • 远程 MCP 服务:企业内可自建 HTTP MCP 服务,用 claude mcp add team-db --url https://mcp.company.com/postgres 接入,统一管控凭据
  • 与 Filesystem MCP 组合:一边读库一边读写代码文件,让 Claude 直接生成与表结构同步的 Repository 层代码
  • 沉淀 SQL 片段库:把高频查询整理成 .sql 文件放进项目,配合 Filesystem MCP 让 AI 直接复用

提示

💡 提示:MCP 生态更新很快,建议定期执行 claude mcp list 检查已配置的 server,并关注官方仓库的更新日志获取新能力。

使用示例

1自动生成业务报表

使用示例

统计最近 30 天每天的订单量和 GMV,按日期升序输出,并标出环比下跌超过 30% 的日期

预期效果

自动识别订单表的时间字段与金额字段类型 生成带 date_trunc 的分组聚合 SQL 并执行 用窗口函数计算环比,直接标出异常日期 结果以表格形式返回,并附上可能的归因分析

2慢查询与索引优化

使用示例

这条 SQL 跑了 8 秒,帮我看看执行计划,给出索引优化建议: SELECT * FROM orders WHERE user_id = 123 AND status = 'paid' ORDER BY created_at DESC LIMIT 20;

预期效果

读取目标表的现有索引定义 基于字段选择性判断应建复合索引及字段顺序 给出可直接执行的 CREATE INDEX 语句 说明索引带来的写入代价,避免盲目加索引

3数据核对与异常排查

使用示例

orders 表和 payments 表按 order_id 关联,帮我找出有订单但没有支付记录的脏数据,统计数量并列出前 10 条

预期效果

自动判断两表的关联字段与外键关系 用 LEFT JOIN 或 NOT EXISTS 找出缺失记录 返回数量统计与样本数据 给出数据补全或清理的建议方案

4把表结构转成代码

使用示例

读一下 users 表的结构,帮我生成对应的 TypeScript 类型定义和一个带分页的查询函数

预期效果

精确映射 Postgres 类型到 TypeScript(含可空字段) 生成完整的 interface 定义与分页查询函数 自动补上参数校验与总条数统计 代码可直接复制到项目中使用

常见问题

Q执行 claude mcp list 显示连接失败(Failed to connect)怎么办?

先用 psql 或 pg_isready 用同一串连接串手工连一次,确认账号密码与端口无误。常见原因是密码中含有 @ # : 等特殊字符未做 URL 编码,请改用百分号编码(如 @ 写成 %40),或改用环境变量传连接串。远程库还需确认 pg_hba.conf 允许你的 IP 访问。

Q提示 spawn npx ENOENT 是什么问题?

Claude Code 找不到 npx,说明 Node.js 未安装或不在系统 PATH 中。执行 node -v 与 npx -v 检查;Windows 用户若在 Git Bash 中安装,请改用官方安装包重装 Node.js 并重启终端。

QMCP 连上了,但 Claude 说看不到任何表?

多半是权限没给全。确认已执行 GRANT USAGE ON SCHEMA 与 GRANT SELECT ON ALL TABLES,且 schema 名不是 public 时要换成实际 schema。另外只读账号默认看不到其他 schema 下的表,需要显式授权。

Q可以让 Claude 直接写库、改数据吗?

官方 server-postgres 只暴露只读查询能力,任何 INSERT、UPDATE、DROP 都会被拒绝。这是刻意的安全设计,不要为了图方便去换用可执行写操作的第三方 server。确实需要写库时,让 Claude 生成 SQL 脚本,人工审核后在 psql 中执行。

阿里云推广

读完想动手?新用户首单 8 折上云

服务器 + 大模型 API + 对象存储,新用户首购享 20% 补贴

首单 8 折云服务器大模型 API对象存储

新用户首购享 20% 补贴(8 折)· 本次推广支持本站持续运营

腾讯云推广

腾讯智能体开发平台 ADP

新客首月专属价,最高直降 880 元,构建/分发/治理企业级 Agent

智能体Agent首月直降 880一站式

腾讯云新用户专享 · 本次推广支持本站持续运营

订阅每日 AI 日报

每天早上 8:00(GMT+8)把当天 AI 行业要闻投递到你的邮箱,随时一键退订。

每天早上 8:00(GMT+8)投递当天日报;若当天日报未生成则不发送,也不会补发往期。

更多订阅方式(RSS / 微信推送)仅发送日报,不做任何其他用途

好物推荐 · 广告合作