Prisma Migrate
类型安全 ORM 迁移用于 Postgres、MySQL、MongoDB 和 SQLite。
CI/CD进阶
为什么
Prisma Migrate 从 schema 变更生成 SQL,类型安全客户端重新生成。处理开发迁移、生产部署和迁移历史。
DORA 2024 DevOps 状态报告显示精英团队部署频率比低绩效团队高 973 倍。带自动化测试的 CI/CD 管道将变更失败率降至 5-15%,而手动部署为 40-60%。
何时使用
Prisma ORM 类型安全 DB 访问用 Prisma Migrate。非 Prisma 项目避免。
如何做
1. Schema — schema.prisma 配 datasource + generator
2. 开发 — npx prisma migrate dev --name init(创建 + 应用)
3. 部署 — npx prisma migrate deploy(生产,应用待定)
4. 重置 — npx prisma migrate reset(仅开发,丢数据)
5. 状态 — npx prisma migrate status
6. Studio — npx prisma studio(数据 GUI)
7. 生成 — npx prisma generate(重新生成客户端)
示例
// schema.prisma
generator client { provider = "prisma-client-js" }
datasource db { provider = "postgresql"; url = env("DATABASE_URL") }
model User {
id Int @id @default(autoIncrement())
email String @unique
posts Post[]
}
model Post { id Int @id @default(autoIncrement()); author User @relation(fields: [authorId], references: [id]); authorId Int }
# 开发 — 创建并应用迁移
npx prisma migrate dev --name add_posts
# 生产 — 仅应用待定迁移
npx prisma migrate deploy
# CI 中 — 迁移后生成客户端
npx prisma migrate deploy && npx prisma generate
常见问题
- ⚠迁移漂移 — schema 和迁移不同步,运行 prisma migrate dev 调和
- ⚠影子 DB 错误 — 开发迁移需 CREATE DATABASE 权限
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓生产用 migrate deploy — 仅应用待定,无新迁移
- ✓迁移提交 git — 团队共享迁移历史
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求