数据库版本化模式迁移
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_fccf428b/database-migration-management。
技能介绍
解决什么问题
数据库 schema 变更最常见的失败模式:迁移脚本只有 upgrade 没有 downgrade,线上出问题只能靠人工补救;字段重命名被工具识别成 drop + add,几百万行数据瞬间丢失;把破坏性变更和兼容变更混在同一个文件里,只能停机部署。这个技能把迁移当作可版本化、可回滚、可审计的工程实践来处理,而不是一次性 DDL 命令。
核心能力
- 评估变更类型:区分兼容变更(additive,如加列)与破坏性变更(destructive,如删列、改约束),后者强制走多阶段迁移
- 按技术栈选择框架:
Alembic(Python/SQLAlchemy)、Prisma Migrate(TypeScript/Prisma)、Flyway(Java/SQL)、Knex(Node.js) - 从 schema diff 生成迁移,并补充显式回滚逻辑;数据回填写进迁移文件,保持 schema 与数据变更原子
- 扩展-收缩(expand-and-contract)部署:加新结构 → 双写 → 回填 → 切读 → 删旧结构,每个阶段都可安全回退
- 在 staging 环境验证迁移与回滚路径,CI 中跑升级/回滚双向测试
适用边界与注意点
autogenerate的产物必须人工审查,重命名字段常被转成 drop + add;DDL的事务性依数据库而定(PostgreSQL 支持,MySQL 不支持),后者要为部分失败准备恢复方案- 大表加
NOT NULL列在低版本 PostgreSQL 会长时间锁表;enum 加值是非事务操作,建议新建类型再切换 - 多实例部署时用 advisory locks 保证只有一个实例执行迁移
- 该技能不自动安装依赖、不修改系统权限、不创建持久化任务;涉及部署等外部写入需先展示目标与影响并取得确认,生成的命令默认仅作参考
使用场景
- 需要给PostgreSQL数据库的用户表添加新字段并回填历史数据时,使用该技能生成带upgrade和downgrade逻辑的Alembic迁移脚本。
- 线上数据库需要执行删除旧列这类破坏性变更时,借助技能规划expand-and-contract多阶段迁移方案以避免停机。
- 在CI流水线中配置自动化测试时,运行该技能以验证新生成的数据库迁移脚本能否正确升级和回滚。
- 在Node.js项目中修改Prisma schema后,需要生成对应的SQL迁移文件并在staging环境验证时。
适合人员
- 后端开发工程师,需要安全地修改数据库表结构并确保线上微服务在变更期间不中断运行。
- 数据库管理员(DBA),负责审核数据库迁移方案,确保所有schema变更具备显式的回滚路径以保障数据安全。
- DevOps工程师,希望将数据库schema变更集成到CI/CD流水线中,实现迁移脚本的自动化测试与部署。
- 全栈开发者,在使用TypeScript或Python技术栈时,需要规范地管理ORM对应的数据库结构版本演进。