[特殊字符] PostgreSQL MCP 开发指南

简介 🚀

PostgreSQL MCP 是一个基于 FastMCP 框架的 PostgreSQL 数据库交互服务。它提供了一套简单易用的工具函数,让你能够通过 API 方式与 PostgreSQL 数据库进行交互。

功能特点 ✨

  • 🔄 数据库连接管理与重试机制
  • 🔍 执行 SQL 查询并获取结果
  • 📋 数据库元数据操作(列出表、模式等)
  • 📝 表结构管理(创建表、描述表结构)
  • 💾 数据操作(插入、更新数据)

快速开始 🏃‍♂️

配置选项

PostgreSQL MCP 支持通过环境变量或命令行参数进行配置:

配置项 环境变量 默认值
主机地址 POSTGRES_HOST localhost
端口 POSTGRES_PORT 5432
用户名 POSTGRES_USER postgres
密码 POSTGRES_PASSWORD postgres
数据库 POSTGRES_DATABASE postgres
连接超时 POSTGRES_CONNECTION_TIMEOUT 10
重试次数 POSTGRES_CONNECT_RETRY_COUNT 3

运行服务

bash 复制代码
python postgresql-mcp.py --host localhost --port 5432 --user postgres --password yourpassword --database yourdb

API 功能 📚

执行 SQL 查询

python 复制代码
response = await execute_query(
    query="SELECT * FROM users WHERE age > %s",
    params=[18],
    db_config={"database": "custom_db"}
)

列出数据库中的表

python 复制代码
tables = await list_tables(schema_name="public")

获取表结构

python 复制代码
table_info = await describe_table(
    table_name="users",
    schema_name="public"
)

列出所有模式

python 复制代码
schemas = await list_schemas()

创建新表

python 复制代码
result = await create_table(
    table_name="new_table",
    columns=[
        {"name": "id", "type": "SERIAL", "primary_key": True},
        {"name": "name", "type": "VARCHAR(100)", "nullable": False},
        {"name": "created_at", "type": "TIMESTAMP", "default": "CURRENT_TIMESTAMP"}
    ]
)

插入数据

python 复制代码
result = await insert_data(
    table_name="users",
    data=[
        {"name": "张三", "age": 30, "email": "zhangsan@example.com"},
        {"name": "李四", "age": 25, "email": "lisi@example.com"}
    ]
)

更新数据

python 复制代码
result = await update_data(
    table_name="users",
    data={"status": "inactive", "updated_at": "CURRENT_TIMESTAMP"},
    condition="user_id = %s",
    params=[1001]
)

错误处理 🔧

服务会提供详细的错误信息,常见问题包括:

  • 连接失败(主机/端口错误)
  • 身份验证失败(用户名/密码错误)
  • 数据库不存在
  • SQL 语法错误
  • 表或列不存在
  • 违反表约束条件

实现细节 🔍

该服务基于以下关键技术:

  • psycopg2 库用于 PostgreSQL 连接
  • FastMCP 框架提供 API 接口
  • 参数化查询防止 SQL 注入
  • 自动重试机制提高可靠性

最佳实践 💡

  • 始终使用参数化查询防止 SQL 注入
  • 为所有更新操作提供 WHERE 条件
  • 利用连接配置优化数据库性能
  • 根据实际需求调整连接超时和重试次数

⚠️ 注意:在生产环境中使用时,请确保设置安全的数据库密码,并适当限制数据库用户权限。

GIthub源码

相关推荐
A-刘晨阳12 分钟前
K8s集群中的数据库新范式:KES-Operator解锁部署、扩缩容、备份全链路自动化
运维·数据库·云原生·kubernetes·自动化
大模型码小白24 分钟前
Harness Engineering 驾驭工程:从使用到项目实战
大数据·数据库·人工智能·python·spring
abcyuu1 小时前
福州中小企业业财一体化系统权限管理与数据安全实践方案
大数据·网络·数据库
天天喝旺仔1 小时前
PostgreSQL 慢查询治理实战:读懂 EXPLAIN ANALYZE 执行计划,落地复合索引、部分索引与覆盖索引
sql·postgresql·性能优化·数据库开发
灵境(虚幻知音)2 小时前
效能评估指标体系构建:方法、流程与模板
android·数据库
沈管家AI数字员工2 小时前
对话式数据分析实操:从自然语言到可视化图表的全流程
数据库·人工智能·ai·oracle·数据分析
may_一一2 小时前
MongoDB数据查看(Studio 3T)
数据库·mongodb
一个天蝎座 白勺 程序猿3 小时前
SQL Server数据库迁移实测:金仓KES V9R4C019让存量T-SQL“少量修改”
数据库·sql·kingbasees
嘻哈baby3 小时前
FastAPI + SQLite 从 0 写一个真正能用的待办 API
数据库·sqlite·fastapi
judezh3 小时前
「可重放」不是形容词:我把自家 Agent 运行时的 run 账本翻了个底朝天
数据库·人工智能