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

如何使用Prisma ORM创建带NULLS DISTINCT的唯一索引?

如何用Prisma ORM创建带NULLS DISTINCT的唯一索引

目前Prisma本身没有内置支持在@@unique中直接指定NULLS DISTINCT,但可以通过保留模型中@@unique声明+修改迁移文件的方式实现需求,既不丢失Prisma对唯一键的识别与校验能力,又能让数据库层面生效NULLS DISTINCT行为。具体步骤如下:

  1. 在Prisma模型中正常声明唯一键
    按常规方式在模型里用@@unique定义唯一字段组合,这样Prisma会在生成客户端代码时保留唯一键的校验逻辑,同时生成基础的迁移文件模板。示例:

    model User {
      id    Int     @id @default(autoincrement())
      email String? @db.VarChar(255)
      name  String
    
      @@unique([email, name])
    }
    
  2. 生成初始迁移文件
    执行命令生成迁移文件:

    npx prisma migrate dev --name add_nulls_distinct_unique_index
    
  3. 修改迁移文件中的索引创建语句
    打开生成的迁移文件(路径为prisma/migrations/[时间戳]_add_nulls_distinct_unique_index/migration.sql),找到创建唯一索引的SQL语句,在末尾添加NULLS DISTINCT:
    原语句示例:

    CREATE UNIQUE INDEX "User_email_name_key" ON "User"("email", "name");
    

    修改后:

    CREATE UNIQUE INDEX "User_email_name_key" ON "User"("email", "name") NULLS DISTINCT;
    
  4. 执行迁移
    再次执行迁移命令,让修改后的SQL生效:

    npx prisma migrate dev
    

补充说明

  • 你提到的第一种思路(移除@@unique做自定义迁移)会导致Prisma客户端失去唯一键的校验逻辑,不推荐采用;
  • 第二种思路用ALTER INDEX不可行,因为PostgreSQL不支持通过ALTER INDEX修改索引的NULLS DISTINCT属性,只能删除后重建,而修改迁移文件是更高效的重建方式。

内容的提问来源于stack exchange,提问作者Jonathan Rodrigues Cardoso

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:06:07