PostGIS MCP + GitHub Copilot 测试环境
目的: 使用MCP(模型上下文协议)和PostGIS测试GitHub Copilot
______________________________________________________________________
🎯 环境设置
这个测试仓库提供:
- ✅ PostGIS 15-3.3 (与课程作业相同)
- ✅ GitHub Copilot 已启用(聊天模式、代理模式、编辑模式)
- ✅ MCP(最小成本路径/最小代价路径) 已安装Python库
- ✅ PostgreSQL 客户端工具 (psql)
- ✅(这个符号本身在中文中没有直接对应的翻译,它通常表示“正确”、“确认”或“完成”的意思,根据上下文可以翻译为“正确”、“确认”或“完成”等。) Python 3.11 带有空间库
______________________________________________________________________
🚀 快速入门
在 Codespaces 中打开
- 点击“代码”→“代码空间”→“在主分支上创建代码空间”
- 等待环境设置完成(约2-3分钟):
- 使用所有工具的容器构建 - Docker-in-Docker 功能初始化 - PostGIS 容器自动启动 - 数据库扩展被创建
- 查找“✅ 设置完成!”消息
- 你准备好了!
连接到PostGIS
# Interactive SQL console (alias configured)
psql-local mcp_test
# Or use full command
PGPASSWORD=postgres psql -h localhost -U postgres -d mcp_test
# Check PostGIS version
psql-local -d mcp_test -c "SELECT PostGIS_version();"
# Check Docker container status
dc ps______________________________________________________________________
使用MCP测试GitHub Copilot
⚠️ 重要提示: GitHub Copilot 还不完全支持 MCP!请参阅 COPILOT_MCP_SETUP.md 翻译为中文是:“COPILOT_MCP设置指南/文件”(注:这里的“md”通常表示Markdown格式的文件,但具体翻译时可能根据上下文省略或保留,因为“md”本身在中文中没有直接对应的含义,但在这里可以理解为该文件是用于设置或说明的Markdown文档)。不过,为了简洁明了,通常可以直接翻译为“COPILOT_MCP设置指南”或“COPILOT_MCP配置说明”,具体取决于文件的实际用途和内容 对于;为了
- 当前MCP的局限性及现状
- 针对数据库感知辅助的功能性解决方案
- 用于模式浏览的SQLTools安装
- 如何手动提供上下文
当下行之有效的方法
1. GitHub Copilot Chat:(可译为)GitHub Copilot聊天功能
- 询问关于PostGIS函数的问题
- 请求空间SQL查询
- 获取空间概念的解释
2. GitHub Copilot Agent(GitHub代码协作者代理):
- 请求空间分析工作流程
- 请求创建数据库模式
- 生成完整的SQL脚本
3. SQLTools(已安装):
- 可视化浏览数据库模式
- 使用自动补全功能运行查询
- 探索表和关系
4. MCP(未来)的手动上下文
- 配置文件准备就绪
.vscode/settings.json并且mcp-config.json - 当Copilot添加MCP支持时,将能够工作
- 可以使用Claude Desktop单独测试MCP
______________________________________________________________________
📊 数据库信息
连接详情:
- 主持人: 本地主机
- 端口: 五千四百三十二
- 数据库: mcp_test 翻译为中文是“MCP测试”
- 用户: PostgreSQL(简称Postgres,但通常称为PostgreSQL)
- 密码: PostgreSQL(通常简称为Postgres)
已安装扩展:
- PostGIS(空间和地理对象)
- PostGIS 顶级(或拓扑)
Docker Compose:
- PostGIS 在一个独立的容器中运行
- 通过……进行管理
docker compose(别名:dc) - 通过Docker卷实现持久数据存储
______________________________________________________________________
🧪 示例实验
测试1:简单空间查询
-- Create a test table with geometry
CREATE TABLE test_points (
id SERIAL PRIMARY KEY,
name TEXT,
location GEOMETRY(Point, 4326)
);
-- Insert test data
INSERT INTO test_points (name, location) VALUES
('Point A', ST_SetSRID(ST_MakePoint(-110.9, 32.2), 4326)),
('Point B', ST_SetSRID(ST_MakePoint(-111.0, 32.3), 4326));
-- Query distance
SELECT
name,
ST_AsText(location) as coordinates,
ST_Distance(location::geography,
ST_SetSRID(ST_MakePoint(-110.95, 32.25), 4326)::geography) as distance_meters
FROM test_points;测试2:询问Copilot
试试问问 GitHub Copilot:
- “如何在PostGIS中围绕一个点创建缓冲区?”
- “编写一个查询,以查找距离某个地点1公里范围内的所有点”
- “解释ST_Distance和ST_DWithin之间的区别”
测试3:使用PostGIS的Python
# Example: Using Python with PostGIS
import psycopg2
# Connect to PostGIS
conn = psycopg2.connect(
host="localhost",
database="mcp_test",
user="postgres",
password="postgres"
)
# Create a cursor and run spatial query
cur = conn.cursor()
cur.execute("SELECT PostGIS_Version();")
print(f"PostGIS Version: {cur.fetchone()[0]}")
# Test MCP server integration (when Copilot supports it)
# See COPILOT_MCP_SETUP.md for configuration______________________________________________________________________
🔧 已安装工具
VS Code 扩展:
- GitHub Copilot
- GitHub Copilot Chat(GitHub 代码补全聊天助手)
- python
- PostgreSQL 客户端(ckolkman.vscode-postgres)
- SQL工具
- SQLTools PostgreSQL 驱动程序
Python 包:
- psycopg2-binary(PostgreSQL适配器)
- SQLAlchemy(对象关系映射,ORM)
- GeoAlchemy2(空间对象关系映射)
- MCP(模型上下文协议)
PostgreSQL 工具:
- psql(交互式终端)
- pg_dump(数据库备份)
- pg_restore(数据库恢复)
______________________________________________________________________
📝 笔记
有待探索的事物
- \[ \] GitHub Copilot对PostGIS函数的理解
- \[ \] 空间SQL生成的质量
- \[ \] 在PostGIS环境下设置MCP服务器
- \[ \] 用于复杂空间工作流的代理模式
- \[ \] Copilot解释空间概念的能力
- \[ \] 地理空间查询建议的性能
预期行为
GitHub Copilot 应该能够:
- 建议使用PostGIS函数
- 完整的空间SQL查询
- 解释坐标系和投影
- 生成几何体创建代码
- 提供距离和面积计算
测试MCP用于:
- 情境感知空间查询
- 数据库模式发现
- 空间数据模式
- 查询优化建议
______________________________________________________________________
🎓 课程背景
这个环境反映了GIST 604B课程中模块4(PostGIS)的作业内容:
- 相同的PostGIS版本(15-3.3)
- 相同的容器配置
- 相同的客户端工具
- 附加:用于实验的GitHub Copilot和MCP
______________________________________________________________________
🐛 故障排除
Docker 权限被拒绝?
错误: permission denied while trying to connect to the Docker daemon socket
快速修复:
- 等待容器构建完成(查找“✅ 设置完成!”!")
- 如果构建已完成但Docker仍然无法工作:
- 新闻界;媒体 Cmd+Shift+P 或者 Ctrl+Shift+P - 输入“开发容器:重建容器” - 等待重建(约2-3分钟)
- 如果那行不通, 删除代码空间 并创建一个新的
看 故障排除指南.md 以获取详细解决方案。
PostgreSQL 未运行?
# Check container status
dc ps
# Start PostGIS container
dc up -d
# View logs
dc logs postgis
# Restart container
dc restart postgis无法连接到数据库?
# Check if PostGIS container is running
dc ps
# Check if PostgreSQL is ready
pg_isready -h localhost -p 5432 -U postgres
# Restart PostGIS
dc restart postgis
# Recreate everything
dc down -v
dc up -d
bash .devcontainer/setup.shGitHub Copilot 无法正常工作?
- 在 VS Code 中检查你是否已登录 GitHub
- 验证Copilot订阅是否处于激活状态
- 重新加载 VS Code 窗口
______________________________________________________________________
🚀 享受实验的乐趣吧!
这是您用于测试GitHub Copilot与空间数据库结合使用的沙盒。尝试不同的提示,探索MCP(可能是指某种工具或插件,具体需根据上下文确定)的集成,发现最适合PostGIS开发的方案!
空间编码愉快! 🗺️✨
