使用Prisma.js拉取数据库后,如何不重置数据完成迁移?
解决Prisma手动迁移后空migration.sql的问题
问题分析
你执行npx prisma migrate resolve --applied 0_init只是标记迁移为已应用,但0_init.sql是空的——因为db pull仅将数据库结构同步到schema.prisma,没有生成对应的迁移SQL。Prisma要求本地迁移文件与数据库_prisma_migrations表的记录完全对应,才能正常管理后续迁移流程。
解决方案步骤
确保Schema与数据库完全同步
- 拉取最新数据库结构到Schema:
npx prisma db pull - 更新Prisma客户端:
npx prisma generate
- 拉取最新数据库结构到Schema:
修复空的
0_init迁移文件- 删除本地空的
0_init迁移文件夹,再用MySQL命令删除_prisma_migrations表中对应记录:DELETE FROM _prisma_migrations WHERE migration_name = '0_init'; - 生成包含当前数据库全量结构的初始迁移SQL:
该命令会对比空数据库与当前Schema,自动生成创建所有表的SQL并填充到npx prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma --script > prisma/migrations/0_init/0_init.sql0_init.sql中。
- 删除本地空的
标记初始迁移为已应用
执行命令让Prisma认可该迁移已在数据库生效:npx prisma migrate resolve --applied 0_init验证后续迁移功能
- 修改
schema.prisma(比如新增字段),执行命令创建新迁移:npx prisma migrate dev --create-only - 检查生成的迁移文件SQL逻辑是否正确,再执行应用:
npx prisma migrate dev - 确认数据库结构更新,且原有数据未丢失。
- 修改
注意事项
- 操作前务必备份数据库,防止数据意外丢失。
- 确保
prisma/migrations目录下的迁移文件与_prisma_migrations表中的记录完全对应,否则Prisma会抛出迁移不一致的错误。
内容的提问来源于stack exchange,提问作者Nabil Mudzaki
相关产品推荐
相关产品推荐

