25000 — 事务状态无效(invalid_transaction_state)
PostgreSQL SQLSTATE 25000:事务状态无效的来源与诊断参考。
25000 — 事务状态无效
速览
25000 是 Class 25 的宽泛“事务状态无效”。锁定的 18.6 源码把它用于并行操作中执行 utility、创建保存点等内部状态;本批不声称有安全的普通 SQL 复现。
| 字段 | 值 |
|---|---|
| SQLSTATE | 25000 |
| 条件名 | invalid_transaction_state |
| 状态 | 有效 |
| 已知存在于 | 7.4 |
| 锁定快照 | 9.0.23, 9.1.24, 9.2.24, 9.3.25, 9.4.26, 9.5.25, 9.6.24, 10.23, 11.22, 12.22, 13.23, 14.24, 15.19, 16.15, 17.11, 18.6, 19beta3 |
| 宏 | ERRCODE_INVALID_TRANSACTION_STATE |
| 别名 | — |
含义
事务状态不能简单等同于“存在一个事务”。25001 表示活动事务阻止命令,25P02 表示失败事务;18.6 调用扫描还显示堆、事务、utility、GUC 和保存点路径中的并行操作保护。
诊断
先区分失败事务、活动事务块限制和并行操作状态,保留服务器原始 SQLSTATE 与报文。内部并行路径需要日志和上下文,不能把普通“事务已打开”误认成 25000。
处理
遵循命令的事务/并行契约;可恢复的客户端状态按精确回滚或重试边界处理。不要用 RAISE 制造自然结果。
源码报文模板
parallel-savepoint:primarycannot define savepoints during a parallel operation(ERROR)parallel-utility:primarycannot execute %s during a parallel operation(ERROR)
适用边界
本批没有为 25000 构造自然 SQL 触发器;请把它视为源码/协议边界,而不是可直接复制的复现脚本。结构化证据 · 案例导出。
作者证据 ID:identity, core-paths, boundary。选定运行记录:—。
版本与边界
锁定目录在 7.4 已观察到该条件,并在列出的正式快照中均存在。18.6 源码扫描确认了本文引用的并行操作路径;由于所需内部状态不是安全的独立 SQL 前置条件,本文没有运行案例。
相关
对比 25001 活动 SQL 事务、25P02 失败 SQL 事务 和 40001 序列化失败。
来源
src.errcodes.18.6(SHA-2566e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba)src.calls.REL_18_6(SHA-2569ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf)src.xact.18.6(SHA-25675b012c0b047d1dc905a30975c244beec366e45eac0dbf109fd21bcd611a8e39)src.utility.18.6(SHA-2567aae5d07628b6debf8456d1d4ea96f28912232192e56ea25773b4c4b61235a00)