如何在Prisma中为多个JSONB字段创建唯一索引?
在Prisma中为PostgreSQL JSON列的嵌套字段创建唯一索引
直接在Prisma的@@unique属性中使用PostgreSQL的JSON路径表达式(比如car->>'year')会触发P1012验证错误,因为Prisma Schema不支持这种语法,哪怕只索引单个JSON路径字段也会报错。
解决方法是通过Prisma的@@index结合原生数据库配置来创建唯一索引:
- 在模型中使用
@@index的db参数,直接定义PostgreSQL原生的唯一索引规则,支持JSON路径表达式:
model Car { id Int @id @default(autoincrement()) car Json // 基于JSON嵌套字段创建唯一索引 @@index([], name: "car_year_model_color_unique", db: { indexes: [ { name: "car_year_model_color_unique", columns: ["(car->>'year')", "(car->>'model')", "(car->>'color')"], unique: true } ] }) }
- 执行命令
prisma migrate dev,Prisma会根据配置在PostgreSQL中创建对应的唯一索引。
这种方式绕过了Prisma Schema对@@unique的语法限制,直接在数据库层面实现基于JSON嵌套字段的唯一约束。
内容的提问来源于stack exchange,提问作者Random Data Monster
相关产品推荐
相关产品推荐

