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

PostgreSQL游标是否按连接分配?复用连接多游标锁死问题求证

单个PostgreSQL连接是否同时仅能管理一个游标?

是的,你的推测完全正确:单个PostgreSQL连接同一时间只能处理一个活跃的游标(或未完成的结果集)。

PostgreSQL的底层协议限制了单个连接在同一时刻只能处理一个结果流。当你在遍历父游标生成器的过程中,该连接正处于处理父游标结果的状态,此时用同一个连接创建并尝试使用子游标,新的操作会被阻塞,直到父游标完全关闭、结果集被耗尽,这就是你遇到锁死的原因。

你提到使用连接池中的独立客户端可以正常工作,这也印证了这个逻辑——每个独立客户端对应一个单独的PostgreSQL连接,各自的游标操作互不干扰,不会出现阻塞冲突。

如果要验证这个结论,你可以做两个简单测试:

  • 先完整遍历完父游标生成器,再去创建并处理子游标,此时不会出现锁死;
  • 在遍历父游标时,每处理完一条父记录就手动关闭对应的游标状态,再创建子游标,阻塞情况也会消失。

你的伪代码中,在父游标遍历过程中直接创建子游标,相当于在同一个连接上同时打开了两个活跃结果流,这触发了PostgreSQL的连接限制,导致锁死。

内容的提问来源于stack exchange,提问作者Daniel A. White

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:39:54