Prisma Next postgresServerless 在 Cloudflare Hyperdrive 后查询挂起怎么排查?

发布时间:2026/9/10 9:32:04

Prisma Next postgresServerless 在 Cloudflare Hyperdrive 后查询挂起怎么排查? Prisma Next postgresServerless 在 Cloudflare Hyperdrive 后查询挂起怎么排查【免费下载链接】ormNext-generation ORM for Node.js TypeScript | PostgreSQL, MySQL, MariaDB, SQL Server, SQLite, MongoDB and CockroachDB项目地址: https://gitcode.com/GitHub_Trending/pr/orm如果你的 Cloudflare Worker 使用 Prisma Next 的postgresServerless每请求门面访问 Hyperdrive 前置的 Postgres线上读查询长时间无响应、最终请求被 Cloudflare 运行时在 30 秒处杀掉并返回 error 1101而本地wrangler dev和集成测试却一切正常——这就是本文要排查的场景。仓库文档已将该现象定位为 Hyperdrive 侧的协议解析问题并给出了明确的工作方案在postgresServerless({...})传入cursor: { disabled: true }。适用前提部署形态是 Cloudflare Workers Hyperdrive连接串来自env.HYPERDRIVE.connectionString完整示例在 examples/prisma-8-cloudflare-worker。症状判定是否命中 Hyperdrive 的挂起缺陷Serverless Deployment Guide 的 Known limitations 一节的实测结论2026 年 5 月生产 smoke 验证是默认 cursor 路径在真实 Hyperdrive 下会挂起具体表现为——pg-cursor的扩展查询命名 portal 协议中客户端在返回行后发送Close portal SyncHyperdrive 回复Protocol Error: Unexpected protocol code: CSQLSTATE58000且不再发送预期的ReadyForQuery连接就此卡死Cloudflare 运行时在 30 秒处杀掉请求报错 error 1101该问题影响每一条读路径SQL DSL、ORM.all()/.first()、for awaitcursor 决策是在驱动层对每次读取做的没有单调用短路开关把读取包进withTransaction(...)不能规避——故障点在 Hyperdrive 的协议解析状态不在连接绑定驱动 catch 块里回退 simple-query 模式的保护也不生效因为回退只在特定抛错时触发而挂起本身不抛错。如果你的现象是任意读都挂、本地复现不了、30 秒被 1101 杀掉基本可以判定命中该缺陷。反过来只有某一条查询慢、或写路径异常则不属于这个根因应先看下面区分一节的其他已知问题。确认触发条件Hyperdrive 前置 cursor 默认开启两个条件同时满足才会触发。对照你的 Worker 代码检查连接串走 Hyperdrive。每请求 runtime 的取法是把env.HYPERDRIVE.connectionString传给db.connect({ url })例如 examples/prisma-8-cloudflare-worker/src/worker.tsawait using runtime await db.connect({ url: env.HYPERDRIVE.connectionString });postgresServerless未显式关闭 cursor。该门面与长驻postgres()门面的默认值相反postgresServerless默认cursor 开启面向流式读取 提前返回的每请求形态而长驻门面默认cursor: { disabled: true }。参考实现 examples/prisma-8-cloudflare-worker/src/prisma/db.ts 中未传cursor选项即默认开启状态import postgresServerless from prisma/orm-postgres/serverless; export const db postgresServerlessContract({ contractJson, middleware: createMiddleware(), // 未传 cursor —— 默认 enabledorigin 在 Hyperdrive 后时必须改为 disabled });注意部署指南原文写作internal/postgres/serverless示例工程实际 import 的是prisma/orm-postgres/serverless二者指同一门面以示例工程为准。为什么本地集成测试测不出来这是排查中最容易误导的一点文档明确说明M1 审计用 miniflare 模拟器与 localhost Postgres 验证过pgpg-cursor的完整路径open / read / cursor early-break / close均不复现挂起缺陷只在真实部署的 Hyperdrive 配置下出现。因此示例工程的vitest-pool-workers集成测试test/worker.integration.test.ts把 Hyperdrive binding 指向本地 Docker Postgrescursor 开启时也能全绿——本地测试通过不构成线上可用的证明该缺陷被文档标注为正在上游跟踪的 Cloudflare Hyperdrive bug在上游修复落地前对真实 Hyperdrive 必须保持 cursor 关闭。另有一个容易混淆的本地挂起属于独立问题早期尝试用prisma devPGlite 经 TCP 暴露的 Postgres作为本地 origin 时wrangler dev下每个碰库路由都会在 miniflare 的 Hyperdrive 模拟器中卡住pg-cloudflaresocket 报 Connection terminated unexpectedly。文档判断其与 PGlite TCP shim 和pg-cloudflaresocket 层在 workerd 中的交互有关。遇到本地挂起先确认你用的是不是 Docker Postgres示例工程为postgres:16跑在 5433 端口而不是把本地 PGlite 问题当成线上 Hyperdrive 缺陷处理。修复关闭 cursor 路径在模块作用域的db构造处src/prisma/db.ts这类文件传入cursor: { disabled: true }强制走 simple-protocol 路径export const db postgresServerlessContract({ contractJson, middleware: createMiddleware(), cursor: { disabled: true }, // REQUIRED if your origin is behind Cloudflare Hyperdrive });文档的措辞是非 Hyperdrive 的 origin 上保持默认即可无需改动。如果你的 Worker 只服务 Hyperdrive 前置的库直接把该选项写死在模块里即可它是门面级选项对每次connect()创建的 runtime 生效。部署侧没有额外动作wrangler.jsonc中 Hyperdrive binding 的id由pnpm exec wrangler hyperdrive create my-hyperdrive --connection-stringpostgres://USER:PASSHOST:PORT/DBNAME打印后替换示例仓库提交的是00000000…占位 id不替换则部署会失败。本地开发用的连接串放在.env的WRANGLER_HYPERDRIVE_LOCAL_CONNECTION_STRING_HYPERDRIVE中而不是.dev.vars——后者是运行时 Worker 密钥WRANGLER_*变量由 Wrangler 自身在构建本地 Hyperdrive binding 时消费新 Wrangler 中该前缀正被CLOUDFLARE_*取代wrangler4.87时两者均可用。验证本地测试套件与重新部署仓库给出的pattern 是否端到端可用的规范参考是示例工程自带的vitest-pool-workers集成测试它在workerd下启动 Worker把 Hyperdrive binding 指向本地 Docker Postgres覆盖 SQL DSL、ORM、事务和 cursor early-break。在examples/prisma-8-cloudflare-worker/下按文档顺序执行pnpm db:up # docker compose up -d --waitpostgres:16 on :5433 pnpm db:init # prisma db init → CREATE TABLE … pnpm seed # 插入 Alice Bob 50 posts pnpm test # vitest run --config vitest.config.ts本地手工冒烟pnpm dev起wrangler dev后curl http://localhost:8787/health curl http://localhost:8787/orm/users?limit5真正的回归确认发生在真实 Hyperdrive 上修改后pnpm run deploy重新部署注意用pnpm run deploy直接pnpm deploy会与 pnpm 内置命令冲突并报ERR_PNPM_INVALID_DEPLOY_TARGET然后观察此前挂起的读路由是否恢复正常返回而不是 30 秒后被 error 1101 杀掉。上游 Hyperdrive 修复落地前不要重新开启 cursor。区分其他挂起与连接类错误以下问题在文档中单独立项不要和 Hyperdrive cursor 缺陷混判wrangler dev能起但/orm/users返回 500 / connection error——本地容器多半停了或忘了pnpm db:up用docker compose ps确认容器健康pnpm db:reset可从干净状态恢复。注意db:down/db:reset会docker compose down -v丢弃容器和数据卷示例中数据为tmpfs承载执行前确认可以丢本地数据。pnpm db:up报Cannot connect to the Docker daemon——容器运行时没起启动 Docker Desktop / OrbStack 等后重试。pnpm db:init连接错误——确认db:up成功且端口是 5433 而非 5432与prisma-8-demo的 Postgres.app 撞端口会在此暴露。事务边界问题——withTransaction(runtime, ...)体内所有语句都在该 per-request runtime 的单条pg.Client上执行在事务体内另开第二个await using runtime2 await db.connect(...)并把部分语句路由过去行为未定义。大结果集内存——isolate 默认 128 MiBWorkers Unbound 更高ORMfindMany形态会把结果集物化进 JS 数组limit(...)是硬上限需要流式时用 SQL DSL 的runtime.execute(...)/runtime.query(...)迭代器加for await ... break。迁移不走 Hyperdrive——prisma db migrate等控制面命令必须从 Node 直连 origin 库连接串执行不要经过 Hyperdrive其边缘查询结果缓存会导致迁移台账脏读这是部署管线问题与运行期挂起无关。上游 Hyperdrive 的修复落地后可以移除cursor: { disabled: true }恢复默认流式路径并用上面的集成测试套件重新回归。【免费下载链接】ormNext-generation ORM for Node.js TypeScript | PostgreSQL, MySQL, MariaDB, SQL Server, SQLite, MongoDB and CockroachDB项目地址: https://gitcode.com/GitHub_Trending/pr/orm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/10 9:27:03

WorkBuddy开放平台实战:从零构建个人Agent应用与工作流编排

WorkBuddy 开放平台上线之后,我身边不少朋友第一反应都是“这跟 CodeBuddy 有什么区别”。用过一段时间之后我的判断是:CodeBuddy 是围着代码转的编程助手,而 WorkBuddy 是围着“业务流程”转的效率智能体,它的开放平台把 Agent、…

2026/9/10 10:07:12

SpringBoot+Vue非遗文化传承网站开发实践

1. 非遗文化传承网站系统概述这个基于SpringBootVue的非遗文化传承网站系统,本质上是一个面向非物质文化遗产保护与传播的数字化解决方案。作为一名参与过多个文化类项目开发的老兵,我深知这类系统的核心价值在于如何平衡技术实现与文化呈现的关系。系统…

2026/9/10 10:07:12

伏昔尼布:低级别胶质瘤靶向新药的用药艺术与安全边界

对于携带IDH基因突变的2级星形细胞瘤或少突胶质瘤细胞瘤患者而言,伏昔尼布(Vorasidenib,商品名VORANIGO)的上市标志着治疗格局的重大转变。作为一款口服、高选择性的IDH1/IDH2双重抑制剂,它能够在不需要立即进行放化疗…

2026/9/10 10:07:12

CANN/ge UT开发指南

UT用例开发指导 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow…

2026/9/10 10:07:12

CANN/GE算子形状推断函数实现

IMPLEMT_INFERFUNC 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorF…

2026/9/10 10:02:10

MTProxy配置参数详解:从端口设置到worker数量优化

MTProxy配置参数详解:从端口设置到worker数量优化 MTProxy是一款高效的代理工具,本文将详细解析其核心配置参数,帮助新手用户快速掌握从端口设置到worker数量优化的全过程,轻松搭建稳定可靠的代理服务。 一、基础参数解析 1.1 …

2026/9/9 13:11:35

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/9 10:21:54

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码