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

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在应用层维护关系,而不是依赖数据库外键,同时修正关系定义:

  1. 在datasource块添加relationMode = "prisma",让Prisma接管关系维护
  2. 移除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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:00:50