如何在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
相关产品推荐
相关产品推荐

