# 25005 — 分支事务没有活动 SQL 事务（no_active_sql_transaction_for_branch_transaction）

> PostgreSQL SQLSTATE 25005：分支事务没有活动 SQL 事务的源码边界与诊断参考。
---

# 25005 — 分支事务没有活动 SQL 事务（no_active_sql_transaction_for_branch_transaction）

## 速览 {#at-a-glance}

`25005` 是分支事务版本的“没有活动 SQL 事务”条件，与 `25P01` 不同；固定 PostgreSQL 18.6 核心扫描没有解析出自然服务器调用点。

<!-- BEGIN SQLSTATE FACTS: generated by scripts/generate.py; do not edit -->

| 字段 | 值 |
| --- | --- |
| SQLSTATE | `25005` |
| 条件名 | `no_active_sql_transaction_for_branch_transaction` |
| 状态 | `有效` |
| 已知存在于 | `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_NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION` |
| 别名 | `—` |

<!-- source facts: data/errcodes/25005.json -->
<!-- END SQLSTATE FACTS -->

## 含义 {#meaning}

该码属于分支事务家族。普通会话在 `BEGIN` 外执行 `SAVEPOINT` 走的是其他页面展示的 `25P01` 路径，不应改称 `25005`。

## 诊断 {#diagnosis}

记录分支 API 操作以及当时是否有活动分支事务。固定扫描没有解析出核心报文，因此精确服务器文本必须来自实际发出该码的实现。

## 处理 {#response}

按该 API 契约结束或启动分支事务。不要仅凭名称套用通用回滚步骤，也不要伪造 PL/pgSQL 复现。

## 源码报文与运行边界 {#messages}

固定 `errcodes.txt` 定义了该条件和宏；`raw/calls/REL_18_6.jsonl` 的解析调用扫描没有直接报错组，因此本批不发布报文模板，也不构造自然 SQL 触发器。

## 适用边界与案例 {#case}

本批运行器在 PostgreSQL 18.6 与 10.21 的选定 case 均为 `not_applicable`，只记录源码边界，没有可复制的 SQL 触发过程。[结构化证据](../../data/evidence/25005.json) · [案例导出](../../data/cases/25005.json)

## 版本与边界 {#versions}

锁定目录包含生成的历史成员事实。选定的 latest 与 PG10 case 都明确记录为仅源码边界，不算自然运行通过。

## 相关 {#related}

[25P01 没有活动 SQL 事务](../25p01/)、[25003 分支事务访问模式](../25003/)、[25P02 失败 SQL 事务](../25p02/)。

## 来源 {#sources}

- [`src.errcodes.18.6`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/errcodes.txt) (SHA-256 `6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba`)
- `src.calls.REL_18_6` — `raw/calls/REL_18_6.jsonl` (SHA-256 `9ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf`)
