如何使用Prisma ORM创建带NULLS DISTINCT的唯一索引?
如何用Prisma ORM创建带NULLS DISTINCT的唯一索引
目前Prisma本身没有内置支持在@@unique中直接指定NULLS DISTINCT,但可以通过保留模型中@@unique声明+修改迁移文件的方式实现需求,既不丢失Prisma对唯一键的识别与校验能力,又能让数据库层面生效NULLS DISTINCT行为。具体步骤如下:
在Prisma模型中正常声明唯一键
按常规方式在模型里用@@unique定义唯一字段组合,这样Prisma会在生成客户端代码时保留唯一键的校验逻辑,同时生成基础的迁移文件模板。示例:model User { id Int @id @default(autoincrement()) email String? @db.VarChar(255) name String @@unique([email, name]) }生成初始迁移文件
执行命令生成迁移文件:npx prisma migrate dev --name add_nulls_distinct_unique_index修改迁移文件中的索引创建语句
打开生成的迁移文件(路径为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;执行迁移
再次执行迁移命令,让修改后的SQL生效:npx prisma migrate dev
补充说明
- 你提到的第一种思路(移除
@@unique做自定义迁移)会导致Prisma客户端失去唯一键的校验逻辑,不推荐采用; - 第二种思路用
ALTER INDEX不可行,因为PostgreSQL不支持通过ALTER INDEX修改索引的NULLS DISTINCT属性,只能删除后重建,而修改迁移文件是更高效的重建方式。
内容的提问来源于stack exchange,提问作者Jonathan Rodrigues Cardoso
相关产品推荐
相关产品推荐

