使用 Prisma.js 更改数据库,而无需重置整个数据库

Jah*_*han 11 node.js prisma prisma2

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

如果我使用过这个命令

npx prisma migrate dev --name role-makeOptional-NormalizedName
Run Code Online (Sandbox Code Playgroud)

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

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

NormalizedName  String?            @unique @db.VarChar(64)
Run Code Online (Sandbox Code Playgroud)

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

Bla*_*her 8

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

NormalizedName  String            @unique @db.VarChar(64)
NormalizedName  String?            @unique @db.VarChar(64)
Run Code Online (Sandbox Code Playgroud)

然后创建草稿迁移:

$ npx prisma migrate dev --name migration-name --create-only
Run Code Online (Sandbox Code Playgroud)

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

ALTER TABLE myTable ALTER COLUMN myColumn {DataType} NULL;
Run Code Online (Sandbox Code Playgroud)

或 Postgres

ALTER TABLE myTable ALTER COLUMN myColumn DROP NOT NULL;
Run Code Online (Sandbox Code Playgroud)

ETC。

然后应用修改后的SQL:

$ npx prisma migrate dev
Run Code Online (Sandbox Code Playgroud)

我希望这对你有用:)

  • **注意:** 当 Prisma 检测到漂移时,“--create-only”并不能防止数据丢失。它 **“应该”** _(至少名称暗示它“应该”)_ 防止数据丢失,但事实并非如此;根据我的经验,它会删除除“_prisma_migrations”之外的所有表,然后不会重新创建表。不知道为什么 Prisma 优先考虑完全数据丢失。 (4认同)
  • 这对我不起作用。prisma 再次警告我数据将会丢失。 (2认同)