百科 / 错误代码 / Class 57 操作员干预
57P05 idle_session_timeout
ERROR 源码确认 详解 未实测
- 条件名
idle_session_timeout- 宏名称
ERRCODE_IDLE_SESSION_TIMEOUT- 启用版本
- 14
- 状态
- 活跃
版本覆盖
速览
57P05 在 idle_session_timeout 到期、backend 确实处于命令之间的 idle 状态时终止 session。固定代码只在无事务分支启动这个 timer;idle-in-transaction 使用另一条件和 timer。
含义
固定 primary 是 terminating connection due to idle-session timeout,severity 为 FATAL。PostgresMain 在 backend 报告 STATE_IDLE 后、且 IsTransactionOrTransactionBlock() 为假时才启用 idle-session timer。读到命令后立即关闭该 timer。因此 57P05 是 session 生命周期终止,区别于 statement timeout 57014、lock timeout 55P03、idle-in-transaction timeout 25P03 和 transaction timeout 25P04。
消息
- primary:
terminating connection due to idle-session timeout。 - severity:FATAL;timer interrupt 会终止连接,不返回可恢复的语句级 ERROR。
- 边界:命令之间真正 idle 的 session 使用
57P05;开放事务内 idle 的 session 使用单独的 idle-in-transaction timer/条件。
报文模板
源码里的格式串,不是某一次运行的输出。%s 之类是占位符,实际报文会填入对象名与取值。适用范围一栏是核验时留下的原始英文记录,未经翻译。
terminating connection due to idle-session timeout
诊断
记录 primary、backend PID、idle_session_timeout 值及来源、最后一条命令、pg_stat_activity 状态、事务状态和服务器日志。确认 timer 启动时 session 是 idle 还是 idle in transaction。单凭客户端耗时不能把它和 statement/lock timeout 区分开,还应结合连接最后的 ReadyForQuery 状态解释 SQLSTATE。
处理
关闭或重建已过期连接,把长时间工作改成明确的工作单元,不要依赖闲置 session。只有策略允许且工作负载确有需要时才调整 idle_session_timeout。FATAL 会关闭连接,原 session 上没有可发送的有效 ROLLBACK;重连后,重放非幂等命令前先核对持久化效果。若工作实际是在事务内 idle,应分别诊断 25P03/25P04 和事务归属。
版本
锁定目录从 14.0 记录此条件;该目录边界不等于精确实现引入版本。固定源码覆盖 PostgreSQL 18.6。
来源
- 上游源码 src/backend/utils/errcodes.txt 第 439 行
- 上游源码 src/backend/tcop/postgres.c 第 3511 行
- 上游源码 src/backend/tcop/postgres.c 第 4585 行
- 上游源码 src/backend/tcop/postgres.c 第 4704 行
证据
断言
每条断言都写明了是怎么核实的,以及它不覆盖什么。这一层是核验时留下的原始英文记录,照原样呈现,未经翻译。
-
57P05 is idle_session_timeout in SQLSTATE Class 57.
-
The cited PostgreSQL 18.6 source paths support the concrete phase, message, and lifecycle boundary described.
-
The locked catalogue records 57P05 from 14.0; that boundary does not prove exact implementation introduction.
-
The idle-session timer starts only in the no-transaction STATE_IDLE branch and is disabled when input arrives; idle-in-transaction uses a separate timer and condition.
同类错误代码
Class 57 操作员干预 下的其他成员。