You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.2 KiB
4.2 KiB
修复数据库迁移脚本
日期: 2026-01-27
类型: Bug 修复
影响范围: 数据库迁移工具
问题描述
migrate_db.sh 脚本存在以下问题:
- 容器名称错误:使用
jointo-server-postgres而非正确的jointo-server-db - 未在容器内执行:直接在宿主机执行 Python 脚本,违反容器化规范
- 使用旧的迁移脚本:调用
scripts/db_migrate.py而非标准的 Alembic 命令
解决方案
1. 修正容器名称
# ❌ 错误
if ! docker ps | grep -q "jointo-server-postgres"; then
# ✅ 正确
APP_CONTAINER="jointo-server-app"
DB_CONTAINER="jointo-server-db"
if ! docker ps | grep -q "${DB_CONTAINER}"; then
2. 在容器内执行命令
# ❌ 错误(宿主机执行)
python scripts/db_migrate.py upgrade
# ✅ 正确(容器内执行)
docker exec ${APP_CONTAINER} alembic upgrade head
3. 使用标准 Alembic 命令
所有迁移操作都使用 Alembic 标准命令:
# 升级
docker exec jointo-server-app alembic upgrade head
# 创建迁移
docker exec jointo-server-app alembic revision --autogenerate -m "描述"
# 回滚
docker exec jointo-server-app alembic downgrade -1
# 查看历史
docker exec jointo-server-app alembic history
# 查看当前版本
docker exec jointo-server-app alembic current
修改内容
核心改进
-
容器化执行
- 所有命令通过
docker exec在容器内执行 - 符合项目 Docker 容器化规范
- 所有命令通过
-
标准化命令
- 使用 Alembic 官方命令
- 移除对旧
scripts/db_migrate.py的依赖
-
容器检查
- 检查应用容器和数据库容器是否运行
- 使用正确的容器名称
-
错误处理
- 容器未运行时给出明确提示
- 提供启动命令建议
新增功能
upgrade子命令:显式升级到最新版本- 更清晰的帮助信息
- 容器状态检查
使用方式
基本用法
# 升级到最新版本(默认)
./migrate_db.sh
# 或显式指定
./migrate_db.sh upgrade
# 创建新迁移
./migrate_db.sh create "添加用户表"
# 回滚一个版本
./migrate_db.sh downgrade
# 查看迁移历史
./migrate_db.sh history
# 查看当前版本
./migrate_db.sh current
# 显示帮助
./migrate_db.sh --help
前置条件
确保 Docker 容器已启动:
# 启动所有服务
docker-compose up -d
# 或单独启动所需服务
docker-compose up -d jointo-server-db jointo-server-app
测试验证
测试 1:检查容器状态
./migrate_db.sh current
预期输出:
📦 检查 Docker 容器状态...
✓ Docker 容器运行正常
📊 当前版本
dc0e4f0a740c (head)
🎉 操作完成!
测试 2:升级数据库
./migrate_db.sh upgrade
预期输出:
📦 检查 Docker 容器状态...
✓ Docker 容器运行正常
🚀 升级数据库到最新版本
INFO [alembic.runtime.migration] Running upgrade -> dc0e4f0a740c
🎉 操作完成!
测试 3:容器未运行
# 停止容器
docker-compose stop
# 尝试迁移
./migrate_db.sh
预期输出:
📦 检查 Docker 容器状态...
❌ 数据库容器未运行: jointo-server-db
请先启动服务:docker-compose up -d
影响范围
受益功能
- ✅ 所有数据库迁移操作
- ✅ 开发环境数据库管理
- ✅ 生产环境部署流程
行为变更
- ✅ 命令在容器内执行(符合规范)
- ✅ 使用标准 Alembic 命令
- ✅ 更严格的容器状态检查
兼容性
- ✅ 向后兼容:保留所有原有子命令
- ✅ 新增
upgrade子命令(可选) - ✅ 默认行为不变(升级到最新版本)
相关文档
后续优化
-
添加迁移验证
- 迁移前检查数据库连接
- 迁移后验证表结构
-
支持更多 Alembic 命令
stamp- 标记版本show- 显示迁移详情branches- 显示分支
-
集成到 CI/CD
- 自动运行迁移测试
- 生产环境迁移审批流程