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

如何在Nest.js后端动态更新Prisma类型且不删除Postgres数据?

解决方案:更新Prisma类型且保留数据库数据

首先纠正一个关键误解:prisma generate本身不会删除数据库数据——它只是根据你的schema.prisma文件生成Prisma Client的类型定义和客户端代码,完全不涉及数据库的读写或结构重置。你遇到的数据丢失,大概率是误执行了prisma migrate reset这类会重置数据库的命令,或者错误使用了prisma db push的强制重置参数。

下面是针对你场景的正确操作流程:

一、常规增量变更流程(推荐,适合需要追踪结构变更的场景)

当你需要给表添加新列时,按以下步骤操作:

  1. 修改schema.prisma文件,添加新列的定义(比如给users表加phone字段)
  2. 生成增量迁移文件并同步到数据库:
    prisma migrate dev --name add_phone_column_to_users
    
    这个命令会生成一个包含新增列SQL的迁移文件,同时将变更同步到数据库,完全保留现有数据
  3. 更新Prisma类型:
    prisma generate
    
    这一步会生成包含新列类型的Prisma.usersCreateInput等类型,不影响数据库任何数据

二、快速迭代场景(适合开发初期频繁调整schema)

如果不想维护迁移文件,想用更快捷的方式同步schema变更:

  1. 修改schema.prisma文件
  2. 直接同步schema到数据库:
    prisma db push
    
    注意:不要加--force-reset参数,默认情况下db push只会增量变更结构,不会删除现有数据
  3. 执行prisma generate更新类型即可

三、关于直接使用Prisma类型作为DTO的建议

你现在直接用Prisma.usersCreateInput作为接口参数类型,虽然快捷,但schema频繁变更时会导致API的请求参数自动变化(比如新列会被自动加入到CreateInput中),可能引发前端或调用方的兼容性问题。建议自定义独立的CreateUserDto,在服务层将DTO映射到Prisma的类型,这样API契约更稳定,不受schema变更的直接影响。

内容的提问来源于stack exchange,提问作者Saad Zubairi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:52:18