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

预发布环境使用Prisma findUnique方法时出现列数据不一致错误

解决Prisma预发布环境UUID id被识别为Int的问题

核心问题分析

预发布环境中Prisma将UUID格式的id字段尝试转换为Int类型,而本地环境正常,说明预发布环境的Prisma Client或数据库schema与本地存在不一致。

排查与解决步骤

1. 强制重新生成并部署Prisma Client

即使你确认过版本,也可能存在部署时未基于当前schema重新生成Client的情况:

  • 在预发布服务器或部署流程中执行:
    npx prisma generate
    
  • 确保生成的node_modules/.prisma/client目录被完整打包部署,而非使用本地旧的Client文件。

2. 校验预发布数据库schema与Prisma schema的一致性

可能预发布数据库的User表id列实际类型未同步为UUID:

  • 拉取预发布数据库的schema到本地对比:
    npx prisma db pull --schema ./prisma/schema.prisma
    
  • 检查拉取后的schema中User表的id字段类型,若仍为Int,则执行迁移同步:
    npx prisma migrate deploy
    
  • 手动确认PostgreSQL数据库中User表的id列类型:
    SELECT data_type FROM information_schema.columns WHERE table_name = 'User' AND column_name = 'id';
    
    预期结果应为uuid(若使用原生UUID类型)或character varying(若用String存储UUID)。

3. 验证预发布环境的数据库连接配置

确认预发布环境的DATABASE_URL指向的是正确的数据库实例,避免连接到了使用Int类型id的旧数据库:

  • 检查环境变量中的DATABASE_URL,对比本地配置,确保数据库实例一致。

4. 清除服务缓存并重启

预发布服务器可能缓存了旧的代码或Prisma元数据:

  • 重启Node.js服务(如使用PM2则执行pm2 restart <app-name>)。
  • 若使用容器部署,重建容器确保加载最新代码。

5. 删除Prisma缓存文件

清理预发布环境的Prisma缓存:

  • 删除node_modules/.prisma目录,重新执行npx prisma generate后重启服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:52:53