我有一个Nest. Js/ Prisma应用程序使用的PostgreSQL数据库。
我们更改了Prisma模式中一个字段的名称,并添加了一个新字段。
现在,当我们想要更新PostreSQL结构时,我运行as suggested by Prisma,下面的命令:
npx prisma generate
然后
npx prisma migrate dev --name textSettings-added --create-only
这个想法是使用--create-only
标志在实际执行迁移之前检查迁移。
但是,当我运行它时,我会得到一个要对DB进行更改的列表和以下消息:
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.
当然,我选择不继续,因为我不想丢失数据。在检查时,我看到迁移文件实际上包含我只是想修改的表的DROP TABLE
。如何避免这种情况?
那么,如何在不影响数据的情况下运行更新?
更新:我看到运行--create-only
创建了一个迁移,然后可以使用prisma migrate dev
在DB级别上实现,但是,在该迁移文件中仍然有一些命令会删除我以前的表,因为里面有一些新参数。我如何在不删除PostgreSQL数据的情况下运行prisma迁移?
更新2:我不希望Prisma在我刚更新表时删除它们。但是,生成的迁移文件会删除它们,然后更改它们。您知道避免这种删除的最佳程序是什么吗?我在某个地方看到,我可以首先使用新选项手动更新DB,然后运行迁移,以便Prisma可以找到更新它的方法。但那对我来说太手动了...也许有其他的想法?
2条答案
按热度按时间7jmck4yq1#
对于某些情况,如重命名表或列,Prisma生成的迁移文件需要更新,如果它们已经包含数据。
如果这适用于您的用例,Prisma的文档建议:
1.更新prisma模式,例如:
1.创建迁移文件但不应用它:
运行
npx prisma migrate dev --create-only
注意:
--create-only
标志避免应用1.更新迁移脚本以删除删除,并改为编写自定义查询,例如:
1.保存并应用迁移:
npx prisma migrate dev
请注意,这些更改可能会导致停机(重命名字段或模型),为此,他们概述了扩展和收缩模式。
qyyhg6bp2#
这可能是一个Prisma bug:https://github.com/prisma/prisma/issues/8053
我最近也遇到过这种情况。如果你只想创建迁移文件,它可能不应该尝试运行迁移。
但总体而言,Prisma有时会重新创建数据库。如果您的迁移中断,则无论如何都需要在应用时重置数据。
我建议你创建一些种子脚本,这样你就可以一致地重新创建数据库状态,这对你的开发环境非常有用。
More info