SuperAPI AI 工具集

prisma-cli-migrate-dev

编程与开发

查看项目

更新于 10-16 03:59

技能介绍

prisma migrate dev 是 Prisma CLI 中用于开发阶段的数据库迁移命令,用于创建并应用迁移。使用时需要影子数据库(shadow database)。

用途

在开发过程中根据 Prisma schema 的变更创建并应用迁移。

主要能力

  • 在影子数据库中运行已有迁移,以检测漂移(drift)
  • 应用任何待处理的迁移
  • 根据 schema 变更生成新的迁移
  • 将新迁移应用到开发数据库
  • 更新 _prisma_migrations 表

命令与选项

命令形式:prisma migrate dev [options]

选项:

  • --name / -n:为迁移命名
  • --create-only:创建新迁移但不应用
  • --schema:自定义 Prisma schema 路径
  • --config:自定义 Prisma 配置文件路径
  • --url:覆盖 Prisma 配置文件中的数据源 URL;资料注明该选项在 v7 中已移除
  • --skip-generate:需显式运行 prisma generate
  • --skip-seed:需显式运行 prisma db seed

使用方式与示例

创建并应用迁移:

prisma migrate dev

若 schema 发生变化,会提示输入迁移名称。

命名迁移:

prisma migrate dev --name add_users_table

仅创建不应用:

prisma migrate dev --create-only

适用于在应用前审查迁移 SQL。

完整工作流(v7):

prisma migrate dev --name my_migration prisma generate # Must run explicitly in v7 prisma db seed # Must run explicitly in v7

迁移文件

生成于 prisma/migrations/ 目录:

prisma/migrations/ ├── 20240115120000_add_users_table/ │ └── migration.sql ├── 20240116090000_add_posts/ │ └── migration.sql └── migration_lock.toml

Schema 漂移检测

如果 migrate dev 检测到漂移(例如手动修改数据库或编辑过迁移文件),会提示重置:

Drift detected: Your database schema is not in sync.

Do you want to reset your database? All data will be lost.

适用场景

  • 本地开发
  • 新增模型/字段
  • 修改关系
  • 创建索引

不适用场景

  • 生产部署(应使用 migrate deploy)
  • CI/CD 流程(应使用 migrate deploy)
  • MongoDB(应改用 db push)

常见模式

schema 变更后。示例 schema:

// schema.prisma - Add new field model User { id Int @id @default(autoincrement()) email String @unique name String? createdAt DateTime @default(now()) // New field }

执行:

prisma migrate dev --name add_created_at

处理数据丢失警告。当迁移会导致数据丢失时:

prisma migrate dev --name remove_field

Warning: You are about to delete data...

Accept with: --accept-data-loss

影子数据库

migrate dev 需要影子数据库来检测漂移,可在 prisma.config.ts 中配置:

export default defineConfig({ datasource: { url: env('DATABASE_URL'), shadowDatabaseUrl: env('SHADOW_DATABASE_URL'), }, })

对于本地 Prisma Postgres(prisma dev),影子数据库会自动处理。

限制

资料明确说明:不应在生产部署和 CI/CD 流程中使用(改用 migrate deploy),不适用于 MongoDB(改用 db push)。其他限制暂未提供。