简介
Postgres MCP 是 ModelContextProtocol 官方仓库维护的数据库集成服务器。它通过 PostgreSQL 协议直接连接数据库,让任何兼容 MCP 的客户端都能用自然语言查询数据库,无需写 SQL、无需打开数据库客户端、无需复制粘贴结果。
对数据分析师与开发者而言,这意味着:让 AI 助理直接帮你"查一下上周的新增用户数"、"统计各品类的销售额排名"、"分析这张表的字段类型与索引情况"。
核心能力
| 工具名 | 用途 | 关键参数 |
|---|---|---|
query | 执行只读 SQL 查询 | sql(SELECT 语句) |
list_tables | 列出所有表 | schema(可选) |
describe_table | 描述表结构 | table |
list_schemas | 列出所有 schema | 无 |
get_table_stats | 获取表统计信息 | table(行数、大小等) |
get_index_info | 获取索引信息 | table |
安全限制:
- 仅支持 只读查询(SELECT),不支持 INSERT/UPDATE/DELETE/DROP
- 自动添加
LIMIT 100防止返回过多数据 - 超时设置防止慢查询阻塞
- 连接使用 SSL 加密(如数据库支持)
连接配置
Postgres MCP 通过连接字符串配置数据库连接:
postgresql://用户名:密码@主机:端口/数据库名?sslmode=require
示例
# 本地数据库
postgresql://postgres:password@localhost:5432/mydb
# 云数据库(如 Supabase)
postgresql://postgres.xxx:password@aws-0-region.pooler.supabase.com:5432/postgres
# 带SSL
postgresql://user:pass@host:5432/db?sslmode=require
各客户端配置示例
Claude Code(CLI)
编辑 ~/.claude/claude_desktop_config.json:
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://postgres:password@localhost:5432/mydb"
]
}
}
}
注意:连接字符串作为 args 的最后一个参数直接传入,不是 env 变量。
Cursor
编辑 ~/.cursor/mcp.json:
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://user:pass@host:5432/db?sslmode=require"
]
}
}
}
VS Code(Continue 插件)
编辑 ~/.continue/config.json:
{
"experimental": {
"modelContextProtocolServers": [
{
"transport": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://user:pass@host:5432/db"
]
}
}
]
}
}
Cline 插件
通过 Cline: MCP Settings 打开配置,结构同 Claude Desktop。
实战场景
场景 1:让 Claude Code 做"数据查询助理"
查询过去 7 天每天的订单量与 GMV,
按日期排序,
标注环比变化。
Claude Code 会调用 query → 自动生成 SQL → 返回结果 → 格式化输出。
场景 2:让 Cursor 做"表结构分析"
分析 users 表的结构:
1. 列出所有字段、类型、是否可空
2. 标注主键与索引
3. 检查是否有未建索引的外键
4. 估算表大小与行数
5. 给出优化建议
Cursor 会调用 describe_table + get_index_info + get_table_stats → 综合分析。
场景 3:让 Claude Code 做"数据质量检查"
检查 orders 表的数据质量:
1. 是否有 NULL 值集中的字段
2. 是否有重复订单号
3. 金额字段是否有负值或异常值
4. 时间字段是否有未来日期
5. 外键引用是否完整
Claude Code 会生成多条质检 SQL → 逐条执行 → 汇总报告。
场景 4:让 VS Code 做"业务指标看板"
帮我计算本月核心业务指标:
1. DAU / MAU / 活跃比
2. 新增用户 / 流失用户 / 净增
3. 留存率(次日 / 7 日 / 30 日)
4. ARPU / ARPPU
5. 转化漏斗各步骤转化率
Cline + Continue 会生成多条聚合 SQL → 合并为指标看板。
与 Filesystem MCP 的对比
| 维度 | Postgres MCP | Filesystem MCP |
|---|---|---|
| 数据类型 | 结构化数据 | 文件 |
| 查询方式 | SQL | 路径/模式 |
| 写入能力 | ❌(只读) | ✅ |
| 适合场景 | 数据分析、业务统计 | 代码管理、文件操作 |
| 安全模型 | 只读 + LIMIT | 目录白名单 |
| 性能 | 快(索引查询) | 快(本地IO) |
建议两个都装:Postgres MCP 查数据,Filesystem MCP 管代码与脚本。
安全最佳实践
1. 创建只读用户
不要用超级用户连接!创建专门的只读用户:
-- 创建只读用户
CREATE USER mcp_reader WITH PASSWORD 'strong_password';
-- 授予 schema 访问权限
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;
-- 撤销写权限(双保险)
REVOKE INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public FROM mcp_reader;
2. 限制 schema 访问
只暴露必要的 schema:
-- 只允许访问业务 schema
GRANT USAGE ON SCHEMA analytics TO mcp_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA analytics TO mcp_reader;
-- 不授权 pg_catalog 等系统 schema
3. 连接加密
始终使用 SSL:
postgresql://user:pass@host:5432/db?sslmode=require
4. 连接字符串保密
连接字符串含密码,切勿提交到 Git:
// ❌ 不要这样写死
"args": ["postgresql://user:pass@host/db"]
// ✅ 用环境变量
"args": ["postgresql://user:${DB_PASS}@host/db"]
5. 网络隔离
生产数据库不要直接暴露公网,用 SSH 隧道或 VPC 内连接:
# SSH 隧道
ssh -L 5432:localhost:5432 user@db-server
# MCP 连接本地隧道
postgresql://user:pass@localhost:5432/db
注意事项
- 只读限制:Postgres MCP 不支持写入操作,数据修改需人工执行 SQL。
- LIMIT 100:查询结果默认限制 100 行,需更多数据时在 SQL 中显式加
LIMIT。 - 超时设置:慢查询会被自动中断(默认 30 秒),复杂分析需优化 SQL 或分批查询。
- 连接池:MCP 服务器维护单连接,高并发场景需考虑连接池。
- 大表查询:对千万级大表的
COUNT(*)或全表扫描会超时,建议先get_table_stats了解规模。 - 视图支持:可以查询视图(View),但
describe_table对视图的描述可能不完整。 - JSON 字段:PostgreSQL 的 JSONB 字段查询结果在 MCP 中以文本返回,需 AI 解析。
- 时区问题:查询时间字段注意数据库时区设置,建议用
AT TIME ZONE转换。 - 权限继承:新建表默认不授予 mcp_reader,需
ALTER DEFAULT PRIVILEGES。
与其他数据库 MCP 的关系
| MCP | 数据库 | 特点 |
|---|---|---|
| Postgres MCP | PostgreSQL | 官方维护,功能最全 |
| SQLite MCP | SQLite | 轻量本地数据库 |
| MySQL MCP | MySQL | 社区维护 |
| Supabase MCP | Supabase | Postgres + Auth + Storage |
若用 Supabase,可直接用 Supabase MCP(含 Auth/Storage 等更多能力);若用自建 PostgreSQL,用 Postgres MCP 即可。
小结
Postgres MCP 是数据团队最直接的 AI 数据分析入口:一个连接字符串、一个只读用户,就能让任意 MCP 客户端查询数据库、分析表结构、统计业务指标。对于需要"即席查询、数据质量检查、业务指标计算"的场景,几乎是必装组件。
MCP 进阶系列下一篇将讲 SQLite MCP,看轻量级本地数据库的 AI 集成方案。