Prisma调用视图报错:public.BalanceTransactionView不存在
解决Prisma视图查询报错:The table public.BalanceTransactionView does not exist
核心原因
问题本质是Prisma默认会把未标记为view的模型当成普通表查找,而你的数据库中只有视图没有对应表;另外Prisma不会自动创建/管理视图,必须手动确保数据库中视图存在,且Schema定义正确关联到视图。
解决步骤
修正Prisma Schema中的视图定义
必须为视图模型添加@@view指令,明确告诉Prisma这是一个视图而非普通表。示例:model BalanceTransactionView { // 字段需和数据库视图的字段完全匹配(名称、类型) id Int @id userId String amount Decimal transactionDate DateTime // 指定视图的实际名称和所属schema @@view(name: "BalanceTransactionView", schema: "public") }注意:如果数据库中视图是蛇形命名(比如
balance_transaction_view),要在@@view的name参数里写实际的数据库视图名,Prisma不会自动转换模型名的大小写/命名风格。重新生成Prisma客户端
执行以下命令让新的视图定义生效:prisma generate确认数据库中视图存在且匹配
即使$queryRaw能查到数据,也要检查:- 视图的实际名称是否和
@@view中指定的完全一致(PostgreSQL中带引号创建的视图名大小写敏感) - 视图所属的schema是否为
public(若不是,需修改@@view里的schema参数) - 若数据库中还没有该视图,需手动执行SQL创建(Prisma的migrate/db push都不会自动创建视图)
- 视图的实际名称是否和
排查缓存问题
若以上步骤完成后仍报错,可删除node_modules/.prisma/client目录清除缓存,再重新执行prisma generate。
内容的提问来源于stack exchange,提问作者Nino Matos
相关产品推荐
相关产品推荐

