Use when creating, modifying, or reviewing database migrations. Covers schema versioning, rollback safety, ORM drift detection, and zero-downtime migration patterns.
宣布: "我正在使用 database-migrations 技能来管理数据库变更。"
每次 schema 变更必须有对应的迁移文件。永远不要手动修改生产数据库。
# EF Core (.NET)
dotnet ef migrations add AddUserEmailIndex
# Prisma (Node.js)
npx prisma migrate dev --name add_user_email_index
# Alembic (Python)
alembic revision --autogenerate -m "add_user_email_index"
# Supabase
supabase migration new add_user_email_index
检查清单:
CONCURRENTLY 创建?# 在测试环境运行
migrate up → 验证 → migrate down → 验证
# 确认幂等性
migrate up → migrate up → 无错误
# EF Core
dotnet ef migrations has-pending-changes
# Prisma
npx prisma migrate diff --from-schema-datasource --to-schema-datamodel
# Alembic
alembic check
发现 drift 时:
/opc-health 报告-- ✓ 安全:新列可为空
ALTER TABLE users ADD COLUMN phone TEXT;
-- 阶段 1:代码停止读写该列(部署代码)
-- 阶段 2:删除列(部署迁移)
ALTER TABLE users DROP COLUMN old_field;
-- 阶段 1:添加新列 + 双写
ALTER TABLE users ADD COLUMN full_name TEXT;
UPDATE users SET full_name = name;
-- 阶段 2:代码切换到新列
-- 阶段 3:删除旧列
ALTER TABLE users DROP COLUMN name;
-- ✓ 不锁表
CREATE INDEX CONCURRENTLY idx_users_email ON users(email);
-- ✗ 会锁表!
CREATE INDEX idx_users_email ON users(email);
| 类型 | 内容 | 回滚 |
|---|---|---|
| Schema | DDL(CREATE/ALTER/DROP) | 通常可逆 |
| Data | DML(INSERT/UPDATE/DELETE) | 需要备份 |
数据迁移规则: