当前位置: 首页 > news >正文

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

简介 🚀

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

功能特点 ✨

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

快速开始 🏃‍♂️

配置选项

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

配置项环境变量默认值
主机地址POSTGRES_HOSTlocalhost
端口POSTGRES_PORT5432
用户名POSTGRES_USERpostgres
密码POSTGRES_PASSWORDpostgres
数据库POSTGRES_DATABASEpostgres
连接超时POSTGRES_CONNECTION_TIMEOUT10
重试次数POSTGRES_CONNECT_RETRY_COUNT3

运行服务

python postgresql-mcp.py --host localhost --port 5432 --user postgres --password yourpassword --database yourdb

API 功能 📚

执行 SQL 查询

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

列出数据库中的表

tables = await list_tables(schema_name="public")

获取表结构

table_info = await describe_table(table_name="users",schema_name="public"
)

列出所有模式

schemas = await list_schemas()

创建新表

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"}]
)

插入数据

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

更新数据

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源码

相关文章:

  • ruoyi中如何使用Public来存储静态资源
  • 全国青少年信息素养大赛 C++算法创意实践挑战赛初赛 集训模拟试卷《四》及详细答案解析
  • 03.Python代码NumPy-通过numPy来创建不同数组
  • 【Qt】Qt 按钮控件详解,PushButton,RadioButton,CheckBox,ToolButton
  • 韩金明董事长受邀出席“个人经济体高质量发展暨私域直播行业合规”调研活动
  • 长亭红队技术面试题
  • springboot中的事务失效(自调用)
  • 基于YOLO11的跌倒检测报警系统
  • 【Linux】su、su-、sudo、sudo -i、sudo su - 命令有什么区别?分别适用什么场景?
  • 儿童内侧颞叶癫痫伴海马硬化的体素形态学分析和机器学习分类
  • Vue —— 实用的工具函数
  • Bp靶场 - Jwt
  • OceanBases数据库单机社区版保姆级安装
  • CNN:卷积到底做了什么?
  • 解决ubuntu安装软件时候deb文件的闪退问题
  • cas 5.3单点登录中心开发手册
  • 深度学习Y5周:yolo.py文件解读
  • LeetCode每日一题4.16
  • 使用CubeMX新建EXTI外部中断工程——使用回调函数
  • 理解 iptables 的表与链
  • 四合一网站建设源码/百度软件应用中心下载
  • 做个网站需要多久网站设计费用多少/谷歌paypal下载
  • 成都网站建设询q479185700霸屏/网站推广的方法
  • 合肥网站制作哪家强/网络推广员上班靠谱吗
  • 网站的交互设计包括哪些/搜索风云榜
  • 网络营销师资格证有什么用/sem和seo