name: 迁移 description: 创建带有回滚脚本的可逆数据库迁移。在修改数据库架构时使用。
迁移技能
目的
创建安全、可逆的数据库迁移。
迁移模板
使用:templates/migration-template.sql
-- 迁移:[描述]
-- 创建日期:[日期]
-- 作者:[姓名]
-- ==================== 向上迁移 ====================
BEGIN;
-- 您的迁移代码在这里
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT NOW()
);
COMMIT;
-- ==================== 向下迁移 ====================
BEGIN;
DROP TABLE IF EXISTS users;
COMMIT;
预迁移清单
使用:checklists/pre-migration.md
- [ ] 向下迁移工作正常
- [ ] 在生产类似数据上测试
- [ ] 性能影响评估
- [ ] 备份计划文档化
- [ ] 部署时间考虑
迁移类型
安全迁移
- 添加表
- 添加可为空列
- 添加索引(并发)
- 添加外键(无验证)
风险迁移
- 删除表(验证无引用)
- 删除列(验证无使用)
- 重命名列(可能破坏应用)
- 更改列类型(可能丢失数据)
危险迁移
- 清空表
- 删除数据库
- 移除约束
大表迁移
对于行数超过100万的表:
- 创建新结构
- 分批回填
- 添加约束
- 切换
- 清理旧结构
回滚策略
- 在运行向上迁移前测试向下迁移
- 文档化手动回滚步骤
- 拥有生产备份
- 考虑代码更改的功能标志