返回 Bug 清单
BUG-0265project-18高待处理unknown
psycopg2 的 with conn: 只 commit/rollback 不 close —— get_conn 改 @contextmanager 根治连接泄漏
发现:2026-10-01验证:2026-10-09置信度:70%
症状
长期运行后 PostgreSQL 连接被耗尽,新请求拿不到连接;每条路由用 with conn: 以为会释放,实际连接一直挂着
根因
psycopg2 的连接对象支持 with,但语义与 PEP 249 一致:with conn: 块结束时只做 commit/rollback,绝不 close 连接。开发者从文件对象/锁的 with 直觉迁移过来,误以为 with 会关闭连接,导致每个请求泄漏一个连接
修复方案
把 get_conn 改造成 @contextmanager:try/yield/finally,finally 里 conn.close()(异常也吞掉保证 close 执行)。调用方 from core.db import get_conn 统一走 with get_conn() as conn:
错误签名
psycopg2 with conn 不 close 连接泄漏 get_conn contextmanager finally close技术信息
来源项目
project-18
标签
project-18, mcp-reported