如何在不删除 PostgreSQL 数据的情况下运行 Prisma 架构更新?

Dmi*_*kin 8 postgresql prisma

我有一个由 Nest.Js / Prisma 应用程序使用的 PostgreSQL 数据库。

我们更改了 Prisma 架构中的字段名称并添加了新字段。

现在,当我们想要更新 PostreSQL 结构时,我按照 Prisma 的建议运行以下命令:

npx prisma generate 
Run Code Online (Sandbox Code Playgroud)

进而

npx prisma migrate dev --name textSettings-added --create-only
Run Code Online (Sandbox Code Playgroud)

这个想法是在实际进行迁移之前使用该--create-only标志来检查迁移。

但是,当我运行它时,我会收到要对数据库进行的更改的列表以及以下消息:

 We need to reset the PostgreSQL database "my_database" at "my_db_name@cluster.us-east-1.rds.amazonaws.com:5432".
Do you want to continue? All data will be lost.
Run Code Online (Sandbox Code Playgroud)

我当然选择不继续,因为我不想丢失数据。经过检查,我发现迁移文件实际上包含DROP TABLE我只想修改的表。如何避免这种情况?

那么如何在不影响数据的情况下运行更新呢?

更新:我看到运行 with--create-only创建了一个迁移,然后可以使用在数据库级别上实现prisma migrate dev,但是,在该迁移文件中,仍然有一些命令由于内部的一些新参数而删除了我以前的表。如何在不删除 PostgreSQL 数据的情况下运行 prisma 迁移?

更新 2:我不希望 Prisma 在我刚刚更新表时删除它们。然而,生成的迁移文件会删除它们,然后更改它们。您知道避免这种下降的最佳程序是什么吗?我在某个地方看到我可以首先使用新选项手动更新数据库,然后运行迁移,这样 Prisma 可以找到一种更新它的方法,但这对我来说似乎太手动了......也许还有其他想法?

Dan*_*ila 1

这可能是 Prisma 错误:https ://github.com/prisma/prisma/issues/8053

我最近也有这样的情况。如果您只想创建迁移文件,它可能不应该尝试运行迁移。

但总的来说,Prisma 有时会重新创建您的数据库。如果迁移失败,那么在应用数据时无论如何都需要重置数据。

我建议您创建一些播种脚本,以便您可以一致地重新创建数据库状态,这对您的开发环境非常有用。

更多信息