SKILL

database-migrations

数据库迁移最佳实践,涵盖模式变更、数据迁移、回滚以及零停机部署,适用于PostgreSQL、MySQL及常用ORM(Prisma、Drizzle、Django、TypeORM、golang-migrate)。

适用对象:数据库。自动收录 · 待核查。

原作者说明节选

从固定版本的 SKILL.md 提取,保留原文语言。以下内容属于作者说明,本站尚未验证安装、兼容或运行结果。

查看中文原文

原文涵盖的主题

  • 数据库迁移模式
  • 何时激活
  • 核心原则
  • 迁移安全检查清单
  • PostgreSQL 模式
  • 安全地添加列
  • 无停机添加索引
  • 重命名列(零停机)

为生产系统提供安全、可逆的数据库模式变更。 创建或修改数据库表 添加/删除列或索引 运行数据迁移(回填、转换) 计划零停机模式变更 为新项目设置迁移工具 1. 每个变更都是一次迁移 — 切勿手动更改生产数据库 2. 迁移在生产环境中是只进不退的 — 回滚使用新的前向迁移 3. 模式迁移和数据迁移是分开的 — 切勿在一个迁移中混合 DDL 和 DML 4. 针对生产规模的数据测试迁移 — 适用于 100 行的迁移可能在 1000 万行时锁定 5. 迁移一旦部署就是不可变的 — 切勿编辑已在生产中运行的迁移 应用任何迁移之前: \[ ] 迁移同时包含 UP 和 DOWN(或明确标记为不可逆) \[ ] 对大表没有全表锁(使用并发操作) \[ ] 新列有默认值或可为空(切勿添加没有默认值的 NOT NULL) \[ ] 索引是并发创建的(对于现有表,不与 CREATE TABLE 内联创建) \[ ] 数据回填是与模式变更分开的迁移 \[ ] 已针对生产数据副本进行测试 \[ ] 回滚计划已记录 切勿在生产中直接重命名。使用扩展-收缩模式: 对于 Prisma 无法表达的操作(并发索引、数据回填): 从 Django 模型中删除列,而不立即从数据库中删除: 对于关键的生产变更,遵循扩展-收缩模式: | 反模式 | 为何会失败 | 更好的方法 | |-------------|-------------|-----------------| | 在生产中手动执行 SQL | 没有审计追踪,不可重复 | 始终使用迁移文件 | | 编辑已部署的迁移 | 导致环境间出现差异 | 改为创建新迁移 | | 没有默认值的 NOT NULL | 锁定表,重写所有行 | 添加可为空列,回填数据,然后添加约束 | | 在大表上内联创建索引 | 在构建期间阻塞写入 | 使用 CREATE INDEX CONCURRENTLY | | 在一个迁移中混合模式和数据的变更 | 难以回滚,事务时间长 | 分开的迁移 | | 在移除代码之前删除列 | 应用程序在缺失列时出错 | 先移除代码,下一次部署再删除列 |

来源仓库
affaan-m/ECC
源文件
docs/zh-CN/skills/database-migrations/SKILL.md
固定版本
d2ef2680594f9a17526a6e1a2e18b3d242c5d17b
阅读完整原作者说明 ↗

来源与内容状态

本条为自动发现的元数据,尚未完成人工文档核查;适用性与运行结果待核查。

原作者:affaan-m/ECC · 原作者仓库元数据。文档核查:未核查。最近来源检查:2026-11-09T14:01:50.302Z。

分类由名称、说明与路径规则生成,分类不代表已核实适配。

许可与权利归属

MIT。第三方内容及版权归原作者,使用条件以原文为准。

许可原文 ↗

本站没有因同步、复制或用户自报成功而将资源标为运行验证通过。

限制与注意事项

  • 元数据收录不代表本站已经安装、适配、实测或进行安全审查。