PostgreSQL 12与用于AI代理的MCP服务器
使用模型上下文协议(MCP)将Claude代码连接到PostgreSQL 12。
太长,读不下去了
# Clone this repository
git clone https://github.com/povesma/postgres12-claude-mcp-server-usage
cd postgres12-claude-mcp-server-usage
# Install Claude Code
npm install -g @anthropic-ai/claude-code
# Start PostgreSQL 12
docker-compose up -d
# Verify it's running
docker exec postgres12 psql -U postgres -d mydb -c "SELECT version();"
# Pull MCP server image
docker pull crystaldba/postgres-mcp
# Start Claude Code in this directory
claude在Claude Code中,MCP服务器将自动连接。让Claude用自然语言与您的数据库交互:
- “显示数据库中的所有架构”
- “公共架构中有哪些表?”
- “运行此SQL:SELECT version()”
- “分析我的数据库的运行状况”
Claude将自动使用适当的MCP工具来满足您的请求。
逐步
包含什么
此存储库包含三个配置文件:
- docker-compose.yml -定义带有数据库的PostgreSQL 12容器
mydb,用户/密码postgres/postgres,暴露在端口5432上 - .mcp.json -运行的MCP服务器配置
crystaldba/postgres-mcp在Docker中,访问不受限制 - .claude/settings.json -Claude代码设置
enableAllProjectMcpServers: trueDocker命令权限(可提交,适用于所有用户)
运作原理
Docker编写设置PostgreSQL 12容器创建了一个名为 postgres12_default。此网络允许其他Docker容器使用容器名称与数据库通信 postgres12 作为主机名。
MCP服务器架构模型上下文协议(MCP)是AI代理与外部数据源交互的标准化方式。这 crystaldba/postgres-mcp 服务器充当Claude和PostgreSQL之间的桥梁,将数据库操作作为Claude可以调用的工具公开。
网络配置:当Claude Code启动MCP服务器时,它作为Docker容器运行 --network postgres12_default,将其放置在与数据库相同的网络上。连接字符串使用 postgres12:5432 (容器名称,而不是localhost),因为Docker的DNS解析同一网络中的容器名称。
访问模式:The --access-mode=unrestricted 标志允许完全读/写访问,包括CREATE、INSERT、UPDATE、DELETE操作。对于生产用途,切换到 --access-mode=restricted 用于只读访问。
自动配置:克劳德代码读取 .mcp.json 在项目根目录中查找可用的MCP服务器。这 .claude/settings.json 提交 enableAllProjectMcpServers: true 预先批准的Docker命令会自动为所有用户启用postgres服务器。用户可以创建 .claude/settings.local.json 在本地覆盖设置(此文件为gitignored)。
工具调用:连接后,Claude可以执行SQL查询、分析数据库健康状况、解释查询计划、推荐索引和检查模式。MCP服务器将Claude的工具调用转换为PostgreSQL操作,并以Claude可以理解并呈现给您的格式返回结果。
为什么选择Docker:在Docker中运行MCP服务器可确保不同环境之间的行为一致,并提供网络隔离。这 --rm 配置中的标志会在每次使用后自动移除容器,防止容器堆积。
数据库凭据
- 主机:localhost(来自主机)或postgres2(来自Docker网络)
- 端口: 5432
- 数据库:mydb
- 用户:Postgres
- 密码:Postgres
安全说明:这些是发展证书。对于生产,使用环境变量或机密管理。
