使用Prisma与Supabase构建商店数据库时遭遇prisma.user.count()执行错误求助
问题详情
使用Prisma搭配Supabase构建商店数据库时,执行prisma.user.count()这类查询时反复触发如下错误:
Invalid
prisma.user.count()invocation:Error occurred during query execution:
ConnectorError(ConnectorError { user_facing_error: None, kind: QueryError(PostgresError { code: "26000", message: "prepared statement "s4" does not exist", severity: "ERROR", detail: None, column: None, hint: None }), transient: false })
怀疑问题和查询频率有关,但未在Supabase文档中找到对应解决方案。
可行解决方案
1. 禁用预准备语句
Prisma默认启用的预准备语句在Supabase环境下可能出现兼容性问题,直接在schema.prisma的数据源配置中关闭:
datasource db { provider = "postgresql" url = env("DATABASE_URL") prepareConnection = "SET prepared_statements = off;" }
修改后执行prisma generate更新客户端,再重新测试查询。
2. 确保Prisma Client单例复用
频繁创建Prisma Client实例会导致连接池异常,务必全局复用一个单例:
// Node.js环境示例 import { PrismaClient } from '@prisma/client' const prisma = global.prisma || new PrismaClient() if (process.env.NODE_ENV !== 'production') global.prisma = prisma export default prisma
3. 调整连接池参数(可选)
如果是高并发场景导致的连接异常,可在schema.prisma中添加连接池配置:
datasource db { provider = "postgresql" url = env("DATABASE_URL") pool_size = 10 // 根据业务调整,默认5 pool_timeout = 30 // 连接超时时间,单位秒 }
4. 重置Supabase数据库
登录Supabase控制台,进入目标项目的Settings > Database,点击"Restart Database"清除无效的预准备语句缓存。
5. 更新Prisma版本
旧版本Prisma可能存在PostgreSQL兼容性bug,执行以下命令更新到最新稳定版:
npm update @prisma/client prisma prisma generate
内容的提问来源于stack exchange,提问作者travelingtramp

