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

如何在schema.prisma中为PostgreSQL配置ID自增

问题根因

当前Prisma模型的ID字段使用@default(cuid())配置,生成的是全局唯一随机字符串作为主键,属于字符串类型主键方案,不会触发PostgreSQL的自增序列逻辑,因此不符合ID自增的需求。你参考的模板默认采用的就是这套字符串ID设计,本身没有配置数据库自增规则。

当前运行效果参考:
运行结果

配置实现PostgreSQL自增ID

标准实现方案(推荐)

直接使用Prisma提供的autoincrement()默认值规则,映射PostgreSQL原生的自增列能力,需要把ID字段类型从String改为Int,修改后的User模型代码如下:

model User {
 id            Int       @id @default(autoincrement())
 name          String?
 email         String?   @unique
 emailVerified DateTime? @map("email_verified")
 image         String?
 createdAt     DateTime  @default(now()) @map(name: "created_at")
 updatedAt     DateTime  @updatedAt @map(name: "updated_at")
 posts         Post[]
 accounts      Account[]
 sessions      Session[]

 @@map(name: "users")
}

特殊场景方案(需保留String类型ID时使用)

如果因为历史关联、业务要求必须保留String类型的ID字段,需要先在PostgreSQL中手动创建自增序列,再通过dbgenerated()绑定序列默认值,该方案维护成本更高,非必要不选用。

配置生效步骤

修改完模型文件后,需要执行以下操作让配置同步到数据库:

  • 开发环境下,直接执行npx prisma db push将结构变更推送到数据库,再执行npx prisma generate更新本地Prisma客户端即可
  • 生产环境下,建议通过迁移命令生成可回溯的迁移脚本:npx prisma migrate dev --name set_user_id_autoincrement,确认脚本逻辑无误后再在生产库执行

注意:如果users表中已经存在存量数据,直接修改ID字段类型会触发数据库报错,需要先清空表数据,或者手动编写迁移脚本完成存量ID的格式转换,再执行结构同步。

内容的提问来源于stack exchange,提问作者lian. lun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:48:17