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
调试和解决生产环境中失败的迁移,请参阅生产故障排除指南。