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

如何在Prisma Schema中引用Supabase SQL视图建立外部表关联

解决方案:在Prisma中关联Supabase的auth.users表

针对你遇到的Prisma与Supabase Auth表关联的问题,这里提供两种可行方案,无需切换到NextAuth:

方法1:直接映射Supabase的auth.users表(推荐)

不需要创建额外视图,直接在Prisma中定义指向auth.users的模型,并标记为忽略迁移操作,避免Prisma修改Supabase的核心Auth表:

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

// 直接关联Supabase的auth.users表,标记为@@ignore避免Prisma修改它
model AuthUser {
  id            String      @id @map("id") // 对应auth.users的uuid类型,必须用String匹配
  email         String?     @map("email")
  role          String      @map("role")
  createdAt     DateTime    @map("created_at")
  updatedAt     DateTime    @map("updated_at")
  invitedAt     DateTime?   @map("invited_at")
  profiles      Profile[]

  @@schema("auth") // 指定表所在的auth schema
  @@ignore        // 告诉Prisma不要在迁移中处理这个模型
}

model Profile {
  id            Int         @id @default(autoincrement())
  uid           String      // 与AuthUser.id类型一致(对应uuid)
  clientId      Int
  firstName     String
  lastName      String

  user          AuthUser    @relation(fields: [uid], references: [id])
  client        Client      @relation(fields: [clientId], references: [id])
}

model Client {
  id            Int         @id @default(autoincrement())
  createdAt     DateTime    @default(now())
  updatedAt     DateTime    @updatedAt // 自动更新时间,替代手动default
  name          String
  type          String
  preferences   Json
  profiles      Profile[]
}

核心要点:

  • 字段类型必须与auth.users原表严格匹配:比如原表id是uuid,Prisma中要用String(或Uuid类型,效果一致)
  • @@schema("auth")明确指定模型属于Supabase的auth schema
  • @@ignore让Prisma仅生成客户端查询代码,不会在db push或migrate dev时尝试创建/修改该表

方法2:保留public.Auth视图但避免Prisma重复创建

如果一定要用你手动创建的public.Auth视图,只需在Prisma模型中添加@@ignore标记,阻止Prisma尝试创建视图:

model Auth {
  id            String      @unique @map("id")
  email         String?
  role          String
  createdAt     DateTime    @map("created_at")
  updatedAt     DateTime    @map("updated_at")
  invitedAt     DateTime?   @map("invited_at")
  profiles      Profile[]

  @@ignore // 让Prisma跳过该模型的迁移操作
}

注意事项:

  • 视图的创建需手动完成(或写入Prisma的初始迁移文件中),后续不要通过Prisma修改视图结构
  • 关联字段类型仍需与原表auth.users保持一致

内容的提问来源于stack exchange,提问作者J. Sheets

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:30:53