Agent skill · software engineering · affaan-m
database-migrations
数据库迁移最佳实践,涵盖模式变更、数据迁移、回滚以及零停机部署,适用于PostgreSQL、MySQL及常用ORM(Prisma、Drizzle、Django、TypeORM、golang-migrate)。
Why this skill is useful
Provides specific migration patterns and commands for PostgreSQL, MySQL, and various ORMs that the AI wouldn't reliably generate on its own.
What it needs
Requires drizzle, prisma installed locally. About 4k tokens when loaded. Last updated 2026-08-06. 238,342 stars on the source repository.
What this skill does
数据库迁移模式 为生产系统提供安全、可逆的数据库模式变更。 何时激活 创建或修改数据库表 添加/删除列或索引 运行数据迁移(回填、转换) 计划零停机模式变更 为新项目设置迁移工具 核心原则 1. 每个变更都是一次迁移 — 切勿手动更改生产数据库 2. 迁移在生产环境中是只进不退的 — 回滚使用新的前向迁移 3. 模式迁移和数据迁移是分开的 — 切勿在一个迁移中混合 DDL 和 DML 4. 针对生产规模的数据测试迁移 — 适用于 100 行的迁移可能在 1000 万行时锁定 5. 迁移一旦部署就是不可变的 — 切勿编辑已在生产中运行的迁移 迁移安全检查清单 应用任何迁移之前: \[ ] 迁移同时包含 UP 和 DOWN(或明确标记为不可逆) \[ ] 对大表没有全表锁(使用并发操作) \[ ] 新列有默认值或可为空(切勿添加没有默认值的 NOT NULL) \[ ] 索引是并发创建的(对于现有表,不与 CREATE TABLE 内联创建) \[ ] 数据回填是与模式变更分开的迁移 \[ ] 已针对生产数据副本进行测试 \[ ] 回滚计划已记录 PostgreSQL 模式 安全地添加列 无停机添加索引 重命名列(零停机) 切勿在生产中直接重命名。使用扩展-收缩模式: 安全地删除列 大型数据迁移 Prisma (TypeScript/Node.js) 工作流 模式示例 自定义 SQL 迁移 对于 Prisma 无法表达的操作(并发索引、数据回填): Drizzle (TypeScript/Node.js) 工作流 模式示例 Django (Python) 工作流 数据迁移 SeparateDatabaseAndState 从 Django 模型中删除列,而不立即从数据库中删除: golang-migrate (Go) 工作流 迁移文件 零停机迁移策略 对于关键的生产变更,遵循扩展-收缩模式: 时间线示例 反模式 反模式 为何会失败 更好的方法 ------------- ------------- ----------------- 在生产中手动执行 SQL 没有审计追踪,不可重复 始终使用迁移文件 编辑已部署的迁移 导致环境间出现差异 改为创建新迁移 没有默认值的 NOT NULL 锁定表,重写所有行 添加可为空列,回填数据,然后添加约束 在大表上内联创建索引 在构建期间阻塞写入 使用 CREATE INDEX CONCURRENTLY 在一个迁移中混合模式和数据的变更 难以回滚,事务时间长 分开的迁移 在移除代码之前删除列 应用程序在缺失列时出错 先移除代码,下一次部署再删除列
How to use it
Reference it in AdaL, Claude Code, Cursor or any coding agent — nothing to install:
@skills affaan-m/database-migrations--d5bfcb