FastPostgresMCP

FastPostgresMCP

🚀 MCP 服务器 PostgreSQL 版本

MCP(Multi-Connection Proxy)服务器是一款代理服务,支持多种数据库协议,还提供了丰富工具与资源,可用于管理数据库连接。本文档将详细介绍如何使用 MCP 服务器与 PostgreSQL 数据库进行交互。

🚀 快速开始

MCP 服务器可助力您高效地与 PostgreSQL 数据库交互。以下将为您介绍安装、配置、启动服务的具体步骤。

📦 安装指南

快速安装

使用以下命令快速安装 mcp-server-postgres

npm install mcp-server-postgres --save

配置步骤

  1. 创建配置文件
    • 新建 config.json 文件。
    • 添加以下配置内容:
{
"database": {
"connections": {
"main": {
"type": "postgres",
"host": "localhost",
"port": 5432,
"username": "db_user",
"password": "db_password"
}
},
"defaultConnection": "main"
},
"authentication": {
"secretKey": "your_secret_key_here",
"enableSSL": true
}
}
- 将 `config.json` 添加到 `.env` 文件中:
echo "MCP_CONFIG=path/to/config.json" >> .gitignore

启动服务

使用以下命令启动服务:

node index.js --config config.json

✨ 主要特性

数据库连接池管理

  • 创建连接池:通过 DBConnectionFactory 类初始化 PostgreSQL 连接池。
const connectionFactory = new DBConnectionFactory({
host: 'localhost',
port: 5432,
username: 'db_user',
password: 'db_password'
});
  • 获取连接
const connection = await connectionFactory.getConnection('main');

执行查询

简单查询

const query = new QueryBuilder('users')
.select(['id', 'username'])
.where('active = true');

const result = await connection.query(query);

参数化查询

const params = {
"username": "john_doe",
"status": "active"
};

const query = new QueryBuilder('users')
.select(['id', 'email'])
.where('username = :username AND status = :status', params);

const result = await connection.query(query);

处理事务

await connection.beginTransaction();
try {
// 执行多个 SQL 操作
await connection.execute("UPDATE orders SET status = 'processing'");
await connection.execute("INSERT INTO order_items SELECT * FROM temp_order_items");
} catch (error) {
await connection.rollback();
throw error;
}

工具集

查询工具 QueryTool

  • 执行单条查询
const queryTool = new QueryTool(connection);
const result = await queryTool.query("SELECT * FROM users WHERE id = $1", [123]);
  • 执行多条查询
const results = await queryTool.execute([
"DELETE FROM sessions WHERE expires_at < NOW()",
"UPDATE users SET last_login = NOW() WHERE username = 'admin'"
]);

事务工具 TransactionTool

  • 包裹在事务中
const transactionTool = new TransactionTool(connection);
await transactionTool.run(operations => {
return Promise.all([
connection.execute("INSERT INTO orders (user_id, order_date) VALUES ($1, NOW())", [userId]),
connection.execute("UPDATE users SET last_order = NOW() WHERE id = $1", [userId])
]);
});

资源管理

模板化查询

  • 定义模板
const queryTemplate = new QueryTemplate({
"name": "getUsers",
"text": "SELECT * FROM users WHERE active = true",
"parameters": []
});
  • 执行模板
await queryTemplate.execute(connection);

🔧 技术细节

安全注意事项

防范 SQL 注入

  • 使用参数化查询,避免直接拼接 SQL 语句。
  • 禁止使用 string_aggarray_agg 等聚合函数,以防注入风险。

数据库权限

  • 最小权限原则:为每个数据库用户分配最小的必要权限。
  • 信息模式访问:确保用于表和列列举的信息模式用户有适当的读取权限。

传输层安全

  • 生产环境强制使用 SSL/TLS 加密,建议设置 SSL 模式为 require 或更严格。

监控与日志

性能监控

  • 连接池状态:监控活动连接数和空闲连接数。
  • 查询延迟:记录每个查询的执行时间,分析瓶颈。

日志记录

  • 配置 winston 或其他日志库,输出到文件或集中式日志服务(如 ELK)。

升级指南

更新依赖

npm update mcp-server-postgres --save

迁移配置

  • 检查新版本的配置选项,更新 config.json 文件。
  • 重新启动服务,确保新配置生效。

📚 详细文档

更多资源

通过以上指南,您可以顺利部署并使用 MCP 服务器与 PostgreSQL 数据库进行高效交互。

  • 0 关注
  • 0 收藏,10 浏览
  • system 提出于 2025-09-24 22:24

相似服务问题