Prisma Migrate 入门
本页介绍如何在使用 Prisma Migrate 的开发环境中开始迁移架构。有关更深入的开发工作流程,请参见 使用 Prisma Migrate 进行开发。
从头开始使用 Prisma Migrate
要在开发环境中开始使用 Prisma Migrate
-
创建 Prisma 架构
schema.prismadatasource 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
)。- 创建第一个迁移
prisma migrate dev --name init
显示CLI结果您的 Prisma 架构现在与您的数据库架构同步,并且您已初始化迁移历史记录
migrations/
└─ 20210313140442_init/
└─ migration.sql -
向架构添加其他字段
model User {
id Int @id @default(autoincrement())
jobTitle String
name String
posts Post[]
} -
创建第二个迁移
prisma migrate dev --name added_job_title
显示CLI结果您的 Prisma 架构再次与您的数据库架构同步,并且您的迁移历史记录包含两个迁移
migrations/
└─ 20210313140442_init/
└─ migration.sql
└─ 20210313140442_added_job_title/
└─ migration.sql
您现在拥有一个迁移历史记录,您可以将其 源代码管理 并用于 将更改部署到测试环境和生产环境。
将 Prisma Migrate 添加到现有项目
将 Prisma Migrate 添加到现有项目所涉及的步骤是
- 内省您的数据库以更新您的 Prisma 架构
- 创建基线迁移
- 更新您的架构或迁移以解决 Prisma 架构语言不支持的功能
- 应用基线迁移
- 提交迁移历史记录和 Prisma 架构
内省以创建或更新您的 Prisma 架构
确保您的 Prisma 架构与您的数据库架构同步。如果您使用的是以前版本的 Prisma Migrate,则应该已经这样做了。
-
内省数据库以确保您的 Prisma 架构是最新的
prisma db pull
创建基线迁移
基线化是指为数据库初始化迁移历史记录的过程,该数据库
- ✔ 在您开始使用 Prisma Migrate 之前就存在
- ✔ 包含必须维护的数据(如生产环境),这意味着数据库无法重置
基线化告诉 Prisma Migrate 假设已经应用了一个或多个迁移。这可以防止生成的迁移在尝试创建已存在的表和字段时失败。
要创建基线迁移
-
如果您有一个
prisma/migrations
文件夹,请删除、移动、重命名或存档此文件夹。 -
运行以下命令以在其中使用您喜欢的名称创建一个
migrations
目录。此示例将使用0_init
作为迁移名称mkdir -p prisma/migrations/0_init
信息0_
很重要,因为 Prisma Migrate 以 词典顺序 应用迁移。您可以使用其他值,例如当前时间戳。 -
使用
prisma migrate diff
生成迁移并将其保存到文件npx prisma migrate diff \
--from-empty \
--to-schema-datamodel prisma/schema.prisma \
--script > prisma/migrations/0_init/migration.sql -
查看生成的迁移
解决 Prisma 架构语言不支持的功能
要包含数据库中已存在的 不支持的数据库功能,您必须替换或修改初始迁移 SQL
-
打开在 创建基线迁移 部分中生成的
migration.sql
文件。 -
修改生成的 SQL。例如
-
如果更改很小,您可以将额外的自定义 SQL 附加到生成的迁移 - 以下示例创建了一个部分索引
/* Generated migration SQL */
CREATE UNIQUE INDEX tests_success_constraint ON posts (subject, target)
WHERE success;
请注意,在一次创建所有表时,表的顺序很重要,因为外键是在同一步骤创建的。因此,要么重新排序它们,要么将约束创建移到所有表创建后的最后一步,这样您就不会遇到 无法创建约束
错误
应用初始迁移
要应用初始迁移
-
对您的数据库运行以下命令
npx prisma migrate resolve --applied 0_init
-
查看数据库架构以确保迁移导致期望的最终状态(例如,通过将架构与生产数据库进行比较)。
新的迁移历史记录和数据库架构现在应该与您的 Prisma 架构同步。
提交迁移历史记录和 Prisma 架构
将以下内容提交到源代码管理
- 整个迁移历史记录文件夹
schema.prisma
文件
更进一步
- 有关将迁移部署到生产环境的更多信息,请参见 使用 Prisma Migrate 部署数据库更改 指南。
- 有关如何使用
prisma migrate diff
、prisma db execute
和/或prisma migrate resolve
在生产环境中调试和解决失败迁移的更多信息,请参见 生产环境故障排除 指南。