数据库基线
基线是指为数据库初始化迁移历史记录的过程,该数据库:
- ✔ 在您开始使用 Prisma Migrate 之前就已存在
- ✔ 包含必须维护的数据(如生产环境),这意味着数据库无法重置
基线告诉 Prisma Migrate 假设已应用一个或多个迁移。这可以防止生成的迁移在尝试创建已存在的表和字段时失败。
注意:我们假设重置和播种开发数据库是可接受的。
基线是 将 Prisma Migrate 添加到具有现有数据库的项目中 的一部分。
为什么要进行基线
当您将 Prisma Migrate 添加到现有项目时,您的初始迁移将包含所有必要的 SQL 代码,以重新创建您开始使用 Prisma Migrate 之前的数据库状态。
您可以编辑初始迁移以包含 Prisma 模式中无法表示的模式元素,例如存储过程或触发器。
您需要此初始迁移来创建和重置开发环境。
但是,当您将迁移prisma migrate deploy
部署到已存在且无法重置的数据库(例如生产环境)时,您不希望包含初始迁移。
目标数据库已经包含初始迁移创建的表和列,尝试再次创建这些元素很可能会导致错误。
基线通过告诉 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 migrate resolve
命令。npx prisma migrate resolve --applied 0_init
此命令将目标迁移添加到_prisma_migrations
表中,并将其标记为已应用。当您运行prisma migrate deploy
以应用新的迁移时,Prisma Migrate 将:
- 跳过所有标记为“已应用”的迁移,包括基线迁移
- 应用基线迁移之后的任何新迁移