2

如何在Prisma.js不必重置整个事物的情况下对数据库进行更改?

如果我使用过这个命令

npx prisma migrate dev --name role-makeOptional-NormalizedName

我将丢失数据库中的所有数据,但不会丢失我的数据。

就我而言,我想更改String为文件String?schema.prisma

NormalizedName  String?            @unique @db.VarChar(64)

是否有适当的命令来避免丢失数据?

4

2 回答 2

3

进入您的架构并进行更改:

NormalizedName  String            @unique @db.VarChar(64)
NormalizedName  String?            @unique @db.VarChar(64)

然后创建一个草稿迁移:

$ npx prisma migrate dev --name migration-name --create-only

然后在 SQL 中编辑迁移(这允许空值,即可选)

ALTER TABLE myTable ALTER COLUMN myColumn {DataType} NULL;

或 Postgres

ALTER TABLE myTable ALTER COLUMN myColumn DROP NOT NULL;

等等

然后应用修改后的 SQL:

$ npx prisma migrate dev

我希望这对你有用:)

于 2021-12-09T06:33:29.327 回答
0

在开发环境中,Prisma Migrate 有时会提示您重置数据库。重置会删除并重新创建数据库,这会导致数据丢失。数据库在以下情况下重置:

  • prisma migrate reset明确调用
  • 您调用prisma migrate dev并且 Prisma Migrate 检测到数据库中的漂移或迁移历史记录冲突

我不确定为什么 Prisma 认为您的更改正在破坏,但可能没有其他方法可以在不丢失数据的情况下进行架构更改。

要重新创建数据库数据,请考虑使用种子脚本

如果您正在制作原型,请考虑使用db pushcommand,尽管如果 Prisma 认为更改正在中断,它仍会导致数据重置。

于 2021-06-24T22:08:48.253 回答