文档 / SQL 状态码 / Class 25 事务状态无效
25000 invalid_transaction_state
事务状态无效
ERROR 源码确认 参考 不适用
- 条件名
invalid_transaction_state- 宏名称
ERRCODE_INVALID_TRANSACTION_STATE- 启用版本
- 7.4
- 状态
- 活跃
版本覆盖
速览
25000 是 Class 25 的宽泛“事务状态无效”。锁定的 18.6 源码把它用于并行操作中执行 utility、创建保存点等内部状态;本批不声称有安全的普通 SQL 复现。
含义
事务状态不能简单等同于“存在一个事务”。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)
报文模板
源码里的格式串,不是某一次运行的输出。%s 之类是占位符,实际报文会填入对象名与取值。适用范围一栏是核验时留下的原始英文记录,未经翻译。
cannot define savepoints during a parallel operation
来源:src/backend/access/transam/xact.c @ REL_18_6
适用范围:The template is guarded by internal parallel-operation state and is not a user-facing active-transaction diagnostic.
cannot execute %s during a parallel operation
来源:src/backend/tcop/utility.c @ REL_18_6
适用范围:The %s substitution is the utility command name.
适用边界
本批没有为 25000 构造自然 SQL 触发器;请把它视为源码/协议边界,而不是可直接复制的复现脚本。结构化证据 · 案例导出。
作者证据 ID:identity, core-paths, boundary。选定运行记录:—。
版本与边界
锁定目录在 7.4 已观察到该条件,并在列出的正式快照中均存在。18.6 源码扫描确认了本文引用的并行操作路径;由于所需内部状态不是安全的独立 SQL 前置条件,本文没有运行案例。
来源
- 上游源码 src/backend/utils/errcodes.txt
- 上游源码 src/backend/tcop/utility.c 第 425–429 行
- 上游源码 src/backend/access/transam/xact.c 第 4385–4387 行
- 核验材料 raw/calls/REL_18_6.jsonl
证据
断言
每条断言都写明了是怎么核实的,以及它不覆盖什么。这一层是核验时留下的原始英文记录,照原样呈现,未经翻译。
-
25000 is invalid_transaction_state, the broad Class 25 condition.
-
The locked PostgreSQL 18.6 source uses 25000 for internal parallel-operation guards such as defining savepoints or executing a utility during parallel operation.
-
The batch does not claim a natural SQL reproduction for 25000. Use 25001 for an active transaction blocking a utility and 25P02 for a failed transaction; do not replace this boundary with RAISE.
同类 SQL 状态码
| 状态码 | 条件名 | 宏名称 | 严重等级 | 版本 |
|---|---|---|---|---|
| 25000 | invalid_transaction_state | ERRCODE_INVALID_TRANSACTION_STATE |
ERROR | 7.4 |
| 事务状态无效的类别码,多见于内部状态检查。 | 活跃 | |||
| 25001 | active_sql_transaction | ERRCODE_ACTIVE_SQL_TRANSACTION |
ERROR | 7.4 |
| 命令不能在活动事务块中执行,如 VACUUM。 | 活跃 | |||
| 25002 | branch_transaction_already_active | ERRCODE_BRANCH_TRANSACTION_ALREADY_ACTIVE |
ERROR | 7.4 |
| 分支事务已经活动,范围窄于 25001。 | 活跃 | |||
| 25003 | inappropriate_access_mode_for_branch_transaction | ERRCODE_INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION |
ERROR | 7.4 |
| 分支事务使用了不适用的访问模式。 | 活跃 | |||
| 25004 | inappropriate_isolation_level_for_branch_transaction | ERRCODE_INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION |
ERROR | 7.4 |
| 分支事务使用了不适用的隔离级别。 | 活跃 | |||
| 25005 | no_active_sql_transaction_for_branch_transaction | ERRCODE_NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION |
ERROR | 7.4 |
| 分支事务缺少活动的 SQL 事务。 | 活跃 | |||
| 25006 | read_only_sql_transaction | ERRCODE_READ_ONLY_SQL_TRANSACTION |
ERROR | 7.4 |
| 命令试图在只读事务中写入数据。 | 活跃 | |||
| 25007 | schema_and_data_statement_mixing_not_supported | ERRCODE_SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED |
ERROR | 7.4 |
| 事务中不支持混合模式语句与数据语句。 | 活跃 | |||
| 25008 | held_cursor_requires_same_isolation_level | ERRCODE_HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL |
ERROR | 7.4 |
| 持有游标要求与操作相同的事务隔离级别。 | 活跃 | |||
| 25P01 | no_active_sql_transaction | ERRCODE_NO_ACTIVE_SQL_TRANSACTION |
ERROR | 7.4 |
| 操作需要活动事务块,如自动提交下的 SAVEPOINT。 | 活跃 | |||
| 25P02 | in_failed_sql_transaction | ERRCODE_IN_FAILED_SQL_TRANSACTION |
ERROR | 7.4 |
| 事务已失败,后续语句被拒绝直到 ROLLBACK。 | 活跃 | |||
| 25P03 | idle_in_transaction_session_timeout | ERRCODE_IDLE_IN_TRANSACTION_SESSION_TIMEOUT |
ERROR | 9.6 |
| 会话在开放事务中空闲超时,被服务器终止。 | 活跃 | |||
| 25P04 | transaction_timeout | ERRCODE_TRANSACTION_TIMEOUT |
ERROR | 17 |
| 事务运行超过 transaction_timeout 被终止。 | 活跃 | |||