PostgreSQL码农集散地

Cursor+MCP 3分钟接管2大国产数据库PolarDB & Oceanbase

仅需3分钟, Cursor+MCP接管2大国产数据库PolarDB & Oceanbase

MCP太火了, 它是AI应用与传统应用进行整合, 让AI应用可以通过call tools的方式操控传统应用, 让AI驱动(接管)传统应用的标准模式. 似乎所有的传统应用都在通过mcp server被动接入AI应用.

下面这篇文档测试了使用AI应用连接管理国产数据库PolarDB & OB, AI应用oterm使用ollama本地部署的大模型.  但是工具调用不太丝滑, 而且oterm就是个cli版ollama Agent, 功能非常单一, 适合了解AI Agent, LLM, MCP client, MCP server, 传统应用的整合原理. 不是生产力工具.

  • 《两大国产数据库PolarDB & OB通过MCP与AI应用整合》

本文将试一下cursor的tools功能. (cursor作为MCP HOST, 通过mcp client连接外部MCP Server, 获取相应mcp server的tools、resource等清单, 并按需调用.)

Cursor是什么?

AI 代码编辑器

旨在让你获得超凡的生产力, Cursor 是使用 AI 编写代码的最佳方式。

下载并安装Cursor:

  • https://www.cursor.com/cn

picpic

可以使用github账号登陆cursor, 免费版提供了pro版本的15天试用.


picpic

打开Cursor后, 安装一些插件, 例如C/Python/Git等.

用Cursor打开PolarDB开源项目

下载PolarDB源码

cd ~  
git clone --depth 1 -b POLARDB_15_STABLE https://github.com/ApsaraDB/PolarDB-for-PostgreSQL polardb_15  

用cursor打开PolarDB开源项目


picpic

picpic

picpic

选中PolarDB项目


picpic

后台会为PolarDB源码建立索引等.

打开一个c文件 polar_bufmgr.c



Image
pic

chat栏, 让Cursor生成这个c文件的用户手册和开发者手册


picpic

picpic

下面是cursor生成的内容

我将为 polar_bufmgr.c 文件生成用户手册和开发者手册。

PolarDB 缓冲区管理器 用户手册

功能概述

PolarDB 缓冲区管理器(Buffer Manager)是数据库的核心组件之一,主要负责:

  1. 管理共享缓冲区(Shared Buffers)
  2. 处理数据页的读写
  3. 实现增量检查点(Incremental Checkpoint)
  4. 支持并行后台写入(Parallel Background Writer)
  5. 提供批量读取(Bulk Read)功能

主要特性

1. 增量检查点

  • 通过 polar_incremental_checkpoint_enabled() 控制是否启用
  • 可以显著减少检查点时的 I/O 负载
  • 适用于 XLOG 和定时触发的检查点

2. 并行后台写入

  • 支持动态调整后台写入进程数量
  • 基于一致性 LSN 延迟自动调整写入策略
  • 可通过参数控制最大并行度

3. 批量读取

  • 通过 polar_bulk_read_buffer_extended() 接口实现
  • 一次性读取多个连续数据块
  • 可显著提升顺序扫描性能

4. 全页快照

  • 支持生成数据页的全量快照
  • 用于加速复制和恢复
  • 可配置触发条件和存储限制

配置参数

主要配置参数包括:

  1. polar_enable_shared_storage_mode - 是否启用共享存储模式
  2. polar_enable_normal_bgwriter - 是否启用普通后台写入
  3. polar_bulk_read_size - 批量读取的最大块数
  4. polar_fullpage_max_segment_size - 全页快照段大小限制

PolarDB 缓冲区管理器 开发者手册

架构设计

核心数据结构

  1. BufferDesc - 缓冲区描述符
structBufferDesc {
    BufferTag tag;           // 缓冲区标识  
    uint32 state;           // 状态标志  
    XLogRecPtr oldest_lsn;  // 最早 LSN  
int recently_modified_count; // 修改计数  
    CopyBufferDesc *copy_buffer; // 复制缓冲区  
    ...  
}  
  1. WritebackContext - 写回上下文
  2. polar_flush_ctl - 刷新控制结构

主要模块

  1. 缓冲区分配与回收
  2. 刷新列表管理
  3. 检查点处理
  4. 并行写入控制
  5. 批量 I/O 处理

关键流程

1. 缓冲区读取流程

Buffer polar_bulk_read_buffer_common(){  
1. 检查是否可以批量读取  
2. 分配缓冲区  
3. 执行批量读取  
4. 验证页面完整性  
5. 应用 WAL 日志(如需)  
6. 设置缓冲区状态  
}  

2. 增量检查点流程

boolpolar_check_incremental_checkpoint(){  
1. 检查是否启用增量检查点  
2. 获取一致性 LSN  
3. 验证时间线  
4. 设置检查点标志  
}  

3. 并行写入控制

voidpolar_adjust_parallel_bgwriters(){  
1. 计算一致性 LSN 延迟  
2. 评估当前写入负载  
3. 动态调整并行度  
}  

开发注意事项

  1. 死锁避免
  • 仅允许升序批量读取以避免 IO_IN_PROGRESS 锁死锁
  1. 数据一致性
  • 需要正确处理检查和页面重放
  • 维护正确的 LSN 顺序
  1. 性能优化
  • 合理使用批量 I/O
  • 避免不必要的内存拷贝
  • 优化锁竞争
  1. 错误处理
  • 实现适当的校验和错误处理
  • 支持页面重试机制
  1. 调试支持
  • 提供详细的跟踪日志
  • 支持故障注入测试

使用Cursor的MCP功能

cursor作为MCP HOST, 通过mcp client连接外部MCP Server, 获取相应mcp server的tools、resource等清单, 并按需调用.

导入mcp server到cursor, mcp server用到了dbhub、oceanbase_mcp_server、mysql_mcp_server、postgresql_mcp_server, 详细参考

  • 《两大国产数据库PolarDB & OB通过MCP与AI完美整合》

打开Cursor settings


picpic

打开或新建 mcp.json



Image
pic

配置 mcp.json



Image
pic
cat ~/.cursor/mcp.json  

{  
"mcpServers": {    
"oceanbase": {    
"command": "python",    
"args": [    
"/Users/digoal/mcp-oceanbase/src/oceanbase_mcp_server/server.py"
      ],    
"env": {    
"OB_HOST": "localhost",    
"OB_PORT": "2881",    
"OB_USER": "digoal",    
"OB_PASSWORD": "test",    
"OB_DATABASE": "test"
      }    
    },    
"dbhub": {    
"command": "docker",    
"args": [    
"run", "-i", "--rm", "bytebase/dbhub", "--transport", "stdio", "--dsn", "postgres://digoal:[email protected]:5432/postgres?sslmode=disable"
      ]    
    },    
"PolarDB": {    
"command": "docker",    
"args": [    
"run",     
"-i",     
"--rm",     
"mcp/postgres",     
"postgresql://digoal:[email protected]:5432/postgres?sslmode=disable"]    
    },    
"mysql": {    
"command": "python",    
"args": [    
"/Users/digoal/mysql_mcp_server/src/mysql_mcp_server/server.py"
      ],    
"env": {    
"MYSQL_HOST": "localhost",    
"MYSQL_PORT": "2881",    
"MYSQL_USER": "digoal",    
"MYSQL_PASSWORD": "test",    
"MYSQL_DATABASE": "test"
      }    
    }    
  }        
}  

试一试cursor tools , 打开cursor setting, MCP. 把需要用到的mcp server设置为enable.



Image
pic

在chat栏, 把Ask改成Agent, 就可以调用mcp server对应的tools了.


picpic

使用cursor比oterm专业很多, 果然是企业级产品. 在mcp调用中有详细的调用内容, 返回结果也可以查询.


picpic

能调用哪些tools取决于mcp server提供的能力, 例如dbhub和postgresql_mcp_server提供的QUERY都使用了read only事务, 防止对数据库进行破坏.


picpic

picpic

在发送llm提供的query前, 先开启只读事务即可.

postgres=# begin transaction read only ;  
BEGIN  
postgres=*# drop table tbl;  
ERROR:  cannot execute DROP TABLE in a read-only transaction  
postgres=!# end;  
ROLLBACK  

https://mcp.so/server/postgres/modelcontextprotocol

Running read-only queries to generate reports without altering database states.


picpic

在postgresql mcp server代码中找到了证据:

https://github.com/modelcontextprotocol/servers/tree/main/src/postgres

https://github.com/modelcontextprotocol/servers/blob/main/src/postgres/index.ts



Image
pic

更多cursor功能有待大家一起发掘.

https://docs.cursor.com/context/model-context-protocol

https://github.com/audivir/cursor-with-ollama

Cursor 如何接入 Qwen 大模型:

  • https://blog.csdn.net/ls1120623840/article/details/145226560
  • https://developer.aliyun.com/article/1640134
  • https://help.aliyun.com/zh/model-studio/getting-started/models

Cursor菜鸟教程

  • https://www.runoob.com/cursor/cursor-tutorial.html

题外话

话说Cursor的核心功能还是开发者提升开发效能的工具, 用mcp把数据库连进来的场景可能有哪些呢?

  • 数据库内核开发过程中的效果校验?
  • 应用开发过程中和数据库相关部分的效果校验?
  • RAG?
  • 会话记忆?

Sublime 是一款非常强大的文本编辑器, 居然可以通过插件支持AI能力, 达到类似cursor的效果.

  • https://github.com/yaroslavyaroslav/OpenAI-sublime-text

数据库和什么AI agent能整合好?

  • tabular类, 数据库分析挖掘, 直面数据.
  • 生态工具, 例如数据库管理类, 智能管理数据库开通、运行等.
    •  个人认为生态工具要火起来应该尽快接入Agent生态, 例如将所有API的能力抽象出来, 转换MCP Server的tools. 让AI Agent能接入你, 帮你加速获得用户流量. 
  • 知识库类, 自动构建和使用RAG相关知识库
  • ... 你有什么想法?