如何在Prisma+PostgreSQL中限制字符串字段仅接受特定值?
可行,有两种常用方案实现这个需求
方案1:使用Prisma枚举类型(Enum)
这是最推荐的方式,同时在应用层(TypeScript编译时)和数据库层做校验,双重保障。
在你的Prisma Schema中定义枚举类型,然后将目标字段指定为该枚举:
// 定义允许的枚举值 enum AllowedStringValue { foo bar } model YourTableName { id Int @id @default(autoincrement()) targetField AllowedStringValue // 使用枚举类型作为字段类型 }
执行prisma migrate dev后,Prisma会在PostgreSQL中创建对应的枚举类型,同时生成的Prisma Client会在编译时限制只能传入foo或bar,如果尝试传入其他值会直接报错;即使绕过Prisma直接操作数据库,PostgreSQL也会拒绝不符合枚举值的插入/更新。
方案2:添加数据库检查约束
如果不想使用枚举,也可以直接在数据库层面添加检查约束,强制字段值只能是指定的字符串。
在Prisma Schema中通过@@db.check定义约束:
model YourTableName { id Int @id @default(autoincrement()) targetField String // 定义检查约束,限制字段值只能是'foo'或'bar' @@db.check("targetField IN ('foo', 'bar')") }
执行prisma migrate dev同步到数据库后,PostgreSQL会拦截任何不符合约束的操作。但这种方式不会在TypeScript编译时做校验,需要你在应用层自己处理输入校验。
内容的提问来源于stack exchange,提问作者Christian May
相关产品推荐
相关产品推荐

