You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Prisma schema后如何对非空数据库执行无数据丢失迁移

Prisma存量数据场景下的无丢失迁移方案

以下是经过验证的可落地方案,全程不会覆盖现有存量数据:

1. 首次接入Prisma迁移的基线配置

如果你的数据库已经跑了很久有存量数据,第一次用Prisma迁移需要先做基线对齐,避免后续迁移触发全表重建:

  • 先执行prisma db pull,把当前数据库的真实结构同步到你的Prisma Schema文件中,确保两边完全一致
  • 执行prisma migrate dev --name init --create-only,这个命令只会生成初始迁移的SQL文件,不会直接执行修改数据库
  • 打开prisma/migrations目录下刚生成的0000_init文件夹,清空里面的SQL文件内容
  • 执行prisma migrate resolve --applied 0000_init,标记这个基线迁移已经在当前库执行过,后续迁移会从这个版本之后开始计算

2. 后续修改Schema的安全迁移流程

每次修改完Prisma Schema需要做迁移时,按以下步骤操作:

  • 执行prisma migrate dev --name [自定义迁移标识名] --create-only,不要直接省略--create-only参数,该参数会让Prisma只生成SQL文件,不会自动执行,你可以先检查SQL内容是否符合预期
  • 如果Prisma自动生成的SQL包含DROP TABLE、DROP COLUMN这类你不想要的破坏性操作,可以手动修改SQL文件,比如修改字段名的场景,把默认的删旧字段加新字段逻辑,改成ALTER TABLE 表名 RENAME COLUMN 旧字段名 TO 新字段名,避免数据丢失
  • 新增非空字段时,建议先把字段设为可选(加?标识),执行迁移补完全量存量数据后,再把字段改成非空,避免非空约束校验不通过导致迁移失败
  • 确认SQL没有问题后,执行prisma migrate dev应用迁移即可

生产环境迁移注意事项

  • 生产环境禁止使用prisma migrate dev,该命令是开发环境专用,存在触发数据库重置的风险,生产环境请使用prisma migrate deploy执行迁移
  • 任何迁移操作前,务必先做全量数据库备份,避免意外
  • 大表变更请先在测试环境验证执行耗时,避免锁表影响线上业务

内容的提问来源于stack exchange,提问作者Mohamed Fadel Moumeni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:57:01