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

如何在Prisma Accelerate与Supabase中配置?pgbouncer=true?

解决Supabase Postgres + Prisma Accelerate的42P05错误与连接字符串无效问题

问题核心

ConnectorError: 42P05(prepared statement不存在)是因为Prisma的预编译语句机制和Supabase的Supavisor连接池不兼容——连接池复用连接时,预编译语句的上下文丢失,导致报错。直接给Prisma Accelerate连接串加?pgbouncer=true会触发无效错误,是因为Acc的连接串有专属格式,不支持直接追加参数。

解决步骤

  • 通过Prisma Schema配置pgBouncer兼容,而非修改连接串
    保留Prisma Accelerate提供的原始连接串,在schema.prisma的datasource块中直接添加pgbouncer = true配置:

    datasource db {
      provider = "postgresql"
      url      = env("DATABASE_URL") // 这里用Acc的原始连接串,不要加额外参数
      pgbouncer = true // 启用pgBouncer兼容模式
    }
    

    这个配置会让Prisma自动适配Supabase的连接池规则,避免预编译语句失效问题,同时不会触发Acc的连接串校验错误。

  • 升级Prisma版本到最新
    新版本的Prisma Client对pgBouncer和Supabase的兼容性做了优化,能减少这类连接池相关的报错。执行以下命令升级:

    npm update @prisma/client prisma
    
  • 极端情况:禁用预编译语句缓存
    如果上述配置仍有报错,可在实例化Prisma Client时禁用预编译语句缓存:

    import { PrismaClient } from '@prisma/client'
    
    const prisma = new PrismaClient({
      transactionOptions: {
        maxPreparedStatements: 0, // 关闭预编译语句缓存
      },
    })
    

    注意:这会带来轻微的性能损耗,但能彻底解决预编译语句相关的连接池问题。

额外注意点

确认Supabase控制台中,数据库的连接池模式是transaction(默认配置),如果是session模式,需要调整为transaction才能配合pgBouncer兼容设置正常工作。

内容的提问来源于stack exchange,提问作者Tittoh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:49:57