跳至主要内容

Prisma Migrate 入门

本页介绍如何在使用 Prisma Migrate 的开发环境中开始迁移架构。有关更深入的开发工作流程,请参见 使用 Prisma Migrate 进行开发

从头开始使用 Prisma Migrate

要在开发环境中开始使用 Prisma Migrate

  1. 创建 Prisma 架构

    schema.prisma
    datasource db {
    provider = "postgresql"
    url = env("DATABASE_URL")
    }

    model User {
    id Int @id @default(autoincrement())
    name String
    posts Post[]
    }

    model Post {
    id Int @id @default(autoincrement())
    title String
    published Boolean @default(true)
    authorId Int
    author User @relation(fields: [authorId], references: [id])
    }
    提示

    您可以在架构中使用 本机类型映射属性 来决定要创建的确切数据库类型(例如,String 可以映射到 varchar(100)text)。

    1. 创建第一个迁移
    prisma migrate dev --name init
    显示CLI结果

    您的 Prisma 架构现在与您的数据库架构同步,并且您已初始化迁移历史记录

    migrations/
    └─ 20210313140442_init/
    └─ migration.sql
  2. 向架构添加其他字段

    model User {
    id Int @id @default(autoincrement())
    jobTitle String
    name String
    posts Post[]
    }
  3. 创建第二个迁移

    prisma migrate dev --name added_job_title
    显示CLI结果

    您的 Prisma 架构再次与您的数据库架构同步,并且您的迁移历史记录包含两个迁移

    migrations/
    └─ 20210313140442_init/
    └─ migration.sql
    └─ 20210313140442_added_job_title/
    └─ migration.sql

您现在拥有一个迁移历史记录,您可以将其 源代码管理 并用于 将更改部署到测试环境和生产环境

将 Prisma Migrate 添加到现有项目

将 Prisma Migrate 添加到现有项目所涉及的步骤是

  1. 内省您的数据库以更新您的 Prisma 架构
  2. 创建基线迁移
  3. 更新您的架构或迁移以解决 Prisma 架构语言不支持的功能
  4. 应用基线迁移
  5. 提交迁移历史记录和 Prisma 架构

内省以创建或更新您的 Prisma 架构

确保您的 Prisma 架构与您的数据库架构同步。如果您使用的是以前版本的 Prisma Migrate,则应该已经这样做了。

  1. 内省数据库以确保您的 Prisma 架构是最新的

    prisma db pull

创建基线迁移

基线化是指为数据库初始化迁移历史记录的过程,该数据库

  • ✔ 在您开始使用 Prisma Migrate 之前就存在
  • ✔ 包含必须维护的数据(如生产环境),这意味着数据库无法重置

基线化告诉 Prisma Migrate 假设已经应用了一个或多个迁移。这可以防止生成的迁移在尝试创建已存在的表和字段时失败。

要创建基线迁移

  1. 如果您有一个 prisma/migrations 文件夹,请删除、移动、重命名或存档此文件夹。

  2. 运行以下命令以在其中使用您喜欢的名称创建一个 migrations 目录。此示例将使用 0_init 作为迁移名称

    mkdir -p prisma/migrations/0_init
    信息

    0_ 很重要,因为 Prisma Migrate 以 词典顺序 应用迁移。您可以使用其他值,例如当前时间戳。

  3. 使用 prisma migrate diff 生成迁移并将其保存到文件

    npx prisma migrate diff \
    --from-empty \
    --to-schema-datamodel prisma/schema.prisma \
    --script > prisma/migrations/0_init/migration.sql
  4. 查看生成的迁移

解决 Prisma 架构语言不支持的功能

要包含数据库中已存在的 不支持的数据库功能,您必须替换或修改初始迁移 SQL

  1. 打开在 创建基线迁移 部分中生成的 migration.sql 文件。

  2. 修改生成的 SQL。例如

  • 如果更改很小,您可以将额外的自定义 SQL 附加到生成的迁移 - 以下示例创建了一个部分索引

    /* Generated migration SQL */

    CREATE UNIQUE INDEX tests_success_constraint ON posts (subject, target)
    WHERE success;
  • 如果更改很大,用数据库转储的结果替换整个迁移文件会更容易(mysqldumppg_dump

信息

请注意,在一次创建所有表时,表的顺序很重要,因为外键是在同一步骤创建的。因此,要么重新排序它们,要么将约束创建移到所有表创建后的最后一步,这样您就不会遇到 无法创建约束 错误

应用初始迁移

要应用初始迁移

  1. 对您的数据库运行以下命令

    npx prisma migrate resolve --applied 0_init
  2. 查看数据库架构以确保迁移导致期望的最终状态(例如,通过将架构与生产数据库进行比较)。

新的迁移历史记录和数据库架构现在应该与您的 Prisma 架构同步。

提交迁移历史记录和 Prisma 架构

将以下内容提交到源代码管理

  • 整个迁移历史记录文件夹
  • schema.prisma 文件

更进一步