跳到主内容
AIHO 2026 全新改版上线

Cursor + MCP 让 AI 直接操作数据库:从零到生产

适用场景

  • 开发时频繁需要查表结构、跑 SQL 验证
  • AI 生成代码时需要知道数据库 schema
  • 想让 AI 帮写数据库迁移文件

为什么用 MCP 而不是复制粘贴

传统做法:手动跑 \d table_name → 复制结果 → 粘给 Cursor → AI 生成 SQL → 手动执行验证。

MCP 做法:Cursor 直接连数据库 → AI 自己查 schema → 生成 SQL → 自己执行验证 → 返回结果。

省的是中间的复制粘贴往返。在复杂查询调试时,这个往返可能 5-10 次。

第一步:装 MCP PostgreSQL Server

用 Smithery 一行装好:

npx @smithery/cli install @modelcontextprotocol/server-postgres --client cursor

或手动配 Cursor Settings → MCP → Add Server:

{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "postgresql://user:pass@localhost:5432/mydb"
      }
    }
  }
}

重启 Cursor,Agent 模式现在能查数据库了。

第二步:安全配置(重要)

用只读账号

绝对不要用超级用户账号连 MCP。 创建只读账号:

CREATE ROLE mcp_readonly WITH LOGIN PASSWORD 'xxx';
GRANT USAGE ON SCHEMA public TO mcp_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO mcp_readonly;

开发/生产隔离

{
  "mcpServers": {
    "postgres-dev": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "postgresql://mcp_readonly:xxx@localhost:5432/mydb_dev"
      }
    }
  }
}

只在 dev 环境配 MCP。生产数据库永远不连 MCP。

限制可查的表

如果有些表(用户密码、token)不想让 AI 看到,用视图:

CREATE VIEW public_safe.users_safe AS
  SELECT id, username, created_at FROM public.users;

REVOKE SELECT ON public.users FROM mcp_readonly;
GRANT SELECT ON public_safe.users_safe TO mcp_readonly;

第三步:实战用法

场景一:查 schema 生成代码

在 Cursor Agent 模式输入:

帮我写一个查询用户订单的 API,需要分页

Cursor 会:

  1. 调 MCP list_tables 看有哪些表
  2. 调 MCP describe_table 看 orders 和 users 表结构
  3. 生成 JOIN 查询 + 分页代码

场景二:调试 SQL

这个查询很慢,帮我优化
SELECT * FROM orders o JOIN users u ON o.user_id = u.id WHERE o.status = 'pending'

Cursor 会:

  1. EXPLAIN ANALYZE 看执行计划
  2. 发现全表扫描
  3. 建议加索引
  4. 生成 migration 文件

场景三:生成迁移

给 orders 表加一个 shipping_address 字段,类型 jsonb,可空

Cursor 会:

  1. 查当前 orders 表结构
  2. 生成 ALTER TABLE SQL
  3. 生成 Drizzle/Prisma migration 文件
  4. 生成回滚 SQL

权限边界

操作只读 MCP可写 MCP
查表结构
SELECT 查询
EXPLAIN
INSERT/UPDATE/DELETE
CREATE/DROP TABLE⚠️ 需额外授权
ALTER TABLE⚠️ 需额外授权

建议:日常用只读 MCP,需要写操作时切到可写 MCP 并加确认步骤。

踩坑记录

  1. MCP Server 连接池:默认无连接池,大量查询会打满 PG 连接。用 PgBouncer 做连接池。
  2. 大表 SELECT:AI 可能跑 SELECT * FROM huge_table。设 statement_timeout 防止卡死:
    ALTER ROLE mcp_readonly SET statement_timeout = '10s';
    
  3. Cursor MCP 不支持事务:每个 SQL 是独立执行,不能 BEGIN/COMMIT。多步操作用存储过程。
  4. DATABASE_URL 泄露.cursor/mcp.json 可能被 git 提交。加到 .gitignore,用 .cursor/mcp.local.json