欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Prisma,我只是在更新表格结构,你为什么要重置我的数据库?

最编程 2024-04-26 22:26:28
...

场景

开发过程中需要对原有的服务器后台的数据库部分进行prisma的重构,并且添加一张新表,因此需要保证数据库中的数据完美迁移到prisma

过程

1. 根据数据库生成Schema定义

image.png 终端执行:

pnpm prisma db pull

执行结果:

image.png 根据数据库生成了对应的Schema

2. 新增一张表或者修改表结构执行迁移命令

image.png 执行迁移命令

pnpm prisma migrate dev

得到prisma警告,从提示可以看出,数据库的schema与迁移历史不一致,需要重置整个数据库,所有的数据都将丢失。 image.png

3. 分析问题

首先需要知道prisma做出需要重置数据库的判断的根据是什么,显然通过prisma db pull 生成的schema是和数据库的结构一致的,因此问题不在这里。 问题出在了migration history上,我们可以从官方文档上找到答案。

image.png 从第四点可以看出,prisma migrate dev是通过_prisma_migrations表中的数据来判断是否需要重置数据表的。

知道了这一点,解决方法就有了。

4. 解决问题

找到了问题的原因,只需要手动创建一条迁移历史就可以解决这个问题。

  1. 在prisma目录下创建migrations/initial/migration.sql文件。 image.png
  2. 通过mysql图形化工具,将创建表结构的sql语句导入到这个文件中(我这里用的是mtysql官方的工具workbench) image.pngimage.png
  3. 通过prisma migrate resolve命令应用这条记录,使其生效(其实就是将他存到_prisma_migrations表中)
pnpm prisma migrate resolve --applied initial

image.pngimage.png

  1. 这个时候,我们在执行迁移命令prisma migrate dev就可以实现完美迁移了(--skip-generate是为了演示的时候跳过生成prisma/client的过程,正常情况下不需要加) image.png

推荐阅读