关于 PostgreSQL MCP Server (Enhanced)
面向需要通过 AI 客户端操作 PostgreSQL 的用户,提供数据库查询、数据写入和结构管理。除只读查询外,还支持事务化修改及表、函数、触发器和索引等对象管理。
主要功能
- 01执行只读 SQL 查询
- 02事务化插入、更新和删除
- 03创建表、函数与触发器
- 04创建索引及修改表结构
- 05读取表结构资源
适用场景
- 01检查数据库表结构并查询数据
- 02通过事务修改数据库记录
- 03创建表或调整数据库结构
MCP 相关
该 MCP 服务向客户端提供 PostgreSQL 查询与修改工具,以及自动发现的表结构资源。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
PostgreSQL MCP 服务(增强版)
一个 Model Context Protocol 服务,可读写 PostgreSQL 数据库。此服务支持大模型检查数据库架构、执行查询、修改数据,以及创建或修改数据库架构对象。
注意: 这是 Anthropic 原版 PostgreSQL MCP 服务 的增强版本。原版服务仅提供只读访问,而此增强版增加了写入功能和架构管理。
组件
工具
数据查询
- query
- 对已连接的数据库执行只读 SQL 查询
- 输入:
sql(string):要执行的 SQL 查询 - 所有查询都在 READ ONLY 事务中执行
数据修改
-
execute
- 执行用于修改数据的 SQL 语句(INSERT、UPDATE、DELETE)
- 输入:
sql(string):要执行的 SQL 语句 - 在事务中执行,并妥善处理 COMMIT/ROLLBACK
-
insert
- 向表中插入新记录
- 输入:
table(string):表名data(object):键值对,其中键为列名,值为要插入的数据
-
update
- 更新表中的记录
- 输入:
table(string):表名data(object):要更新字段的键值对where(string):用于确定要更新记录的 WHERE 条件
-
delete
- 删除表中的记录
- 输入:
table(string):表名where(string):用于确定要删除记录的 WHERE 条件
架构管理
-
createTable
- 使用指定的列和约束创建新表
- 输入:
tableName(string):表名columns(array):列定义数组,包含名称、类型和可选约束constraints(array):可选的表级约束数组
-
createFunction
- 创建 PostgreSQL 函数/过程
- 输入:
name(string):函数名parameters(string):函数参数returnType(string):返回类型language(string):语言(plpgsql、sql 等)body(string):函数体options(string):可选的其他函数选项
-
createTrigger
- 在表上创建触发器
- 输入:
name(string):触发器名称tableName(string):要应用触发器的表functionName(string):要调用的函数when(string):BEFORE、AFTER 或 INSTEAD OFevents(array):事件数组(INSERT、UPDATE、DELETE)forEach(string):ROW 或 STATEMENTcondition(string):可选的 WHEN 条件
-
createIndex
- 在表上创建索引
- 输入:
tableName(string):表名indexName(string):索引名columns(array):要建立索引的列unique(boolean):索引是否唯一type(string):可选的索引类型(BTREE、HASH、GIN、GIST 等)where(string):可选条件
-
alterTable
- 更改表结构
- 输入:
tableName(string):表名operation(string):操作(ADD COLUMN、DROP COLUMN 等)details(string):操作详情
资源
此服务提供数据库中每个表的架构信息:
- 表架构(
postgres://<host>/<table>/schema)- 每个表的 JSON 架构信息
- 包含列名和数据类型
- 从数据库元数据中自动发现
与 Claude Desktop 配合使用
要在 Claude Desktop 桌面应用中使用此服务,请将以下配置添加到 claude_desktop_config.json 的 "mcpServers" 部分:
Docker
- 在 macOS 上运行 Docker 时,如果服务在主机网络上运行(例如 localhost),请使用 host.docker.internal
- 可以使用
postgresql://user:password@host:port/db-name将用户名/密码添加到 PostgreSQL URL 中 - 如果需要绕过 SSL 证书验证,请添加
?sslmode=no-verify
{
"mcpServers": {
"postgres": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"mcp/postgres",
"postgresql://host.docker.internal:5432/mydb"]
}
}
}
NPX
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://localhost/mydb"
]
}
}
}
将 /mydb 替换为你的数据库名称。
使用示例
查询数据
/query SELECT * FROM users LIMIT 5
插入数据
/insert table="users", data={"name": "John Doe", "email": "[email protected]"}
更新数据
/update table="users", data={"status": "inactive"}, where="id='123'"
创建表
/createTable tableName="tasks", columns=[
{"name": "id", "type": "SERIAL", "constraints": "PRIMARY KEY"},
{"name": "title", "type": "VARCHAR(100)", "constraints": "NOT NULL"},
{"name": "created_at", "type": "TIMESTAMP", "constraints": "DEFAULT CURRENT_TIMESTAMP"}
]
创建函数和触发器
/createFunction name="update_timestamp", parameters="", returnType="TRIGGER", language="plpgsql", body="BEGIN NEW.updated_at = NOW(); RETURN NEW; END;"
/createTrigger name="set_timestamp", tableName="tasks", functionName="update_timestamp", when="BEFORE", events=["UPDATE"], forEach="ROW"
构建
Docker:
docker build -t mcp/postgres -f Dockerfile .
安全注意事项
- 所有数据修改操作都使用事务,并妥善处理 COMMIT/ROLLBACK
- 每项操作都会返回已执行的 SQL,以确保透明度
- 服务在插入/更新操作中使用参数化查询,以防止 SQL 注入
- 安全修复(v1.0.2):只读查询工具现在使用预处理语句,以防止 SQL 注入攻击绕过事务隔离并执行多条语句
许可证
此 MCP 服务采用 MIT 许可证。这意味着你可以自由使用、修改和分发该软件,但须遵守 MIT 许可证的条款和条件。详情请参阅项目仓库中的 LICENSE 文件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。