Prisma向PlanetScale推送Schema时遇外键约束不允许问题求助
解决Prisma向PlanetScale推送Schema时「Foreign key constraints are not allowed」错误
问题原因
PlanetScale 默认禁用外键约束——它基于Vitess的架构为了支持横向扩展和无锁在线Schema变更,不支持数据库级别的外键。而你当前的Prisma Schema里,@relation注解会让Prisma自动生成数据库外键约束,这就触发了PlanetScale的限制,导致报错。另外你原Schema里Note的userId加了@unique,这会变成一对一关系,和User模型里的notes Note[](一对多)逻辑冲突。
解决方案
要解决这个问题,你需要让Prisma在应用层维护关系,而不是依赖数据库外键,同时修正关系定义:
- 在datasource块添加
relationMode = "prisma",让Prisma接管关系维护 - 移除Note模型
userId字段的@unique,匹配一对多的关系逻辑
修改后的完整Schema代码:
generator client { provider = "prisma-client-js" binaryTargets = ["native"] } datasource db { provider = "mysql" url = env("DATABASE_URL") relationMode = "prisma" // 启用Prisma关系维护模式 } model User { id String @id @default(uuid()) notes Note[] } model Note { id String @id @default(uuid()) userId String user User @relation(fields: [userId], references: [id]) }
后续操作
修改完成后,重新执行迁移命令:
- 开发环境:
prisma migrate dev - 生产环境:
prisma migrate deploy
这样就能正常将Schema变更推送到PlanetScale了。
内容的提问来源于stack exchange,提问作者Adrian Hossen
相关产品推荐
相关产品推荐

