# 25002 — 分支事务已活动（branch_transaction_already_active）

> PostgreSQL SQLSTATE 25002：分支事务已活动的来源与诊断参考。
---

# 25002 — 分支事务已活动

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

`25002` 表示分支事务已经活动，范围窄于 `25001`，也不同于 `25P02`。本文只记录锁定条件定义和 18.6 核心调用扫描未发现直接报文路径的边界。

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

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

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

## 含义 {#meaning}

它属于 Class 25，但不应作为嵌套事务或普通保存点的总称。核心 `errcodes.txt` 定义了宏；项目对 18.6 核心解析调用的穷尽扫描没有找到 `25002` 报告组。

## 诊断 {#diagnosis}

使用精确 SQLSTATE 和事务上下文，区分分支管理 API、保存点、活动事务块和失败事务。没有核心调用点不代表可以从别的码推断报文或触发器。

## 处理 {#response}

保留分支管理操作及其事务边界，按创建该分支的 API 处理。本批没有确认安全自然触发，不用 RAISE 代替。

## 源码报文模板 {#messages}


## 适用边界 {#case}

本批没有为 `25002` 构造自然 SQL 触发器；请把它视为源码/协议边界，而不是可直接复制的复现脚本。[结构化证据](../../data/evidence/25002.json) · [案例导出](../../data/cases/25002.json)。

作者证据 ID：`identity`, `source-boundary`。选定运行记录：—。

## 版本与边界 {#versions}

锁定目录在 `7.4` 已观察到该条件，并在列出的正式快照中均存在。18.6 核心调用扫描没有解析出的路径；扩展或未来源码可能增加路径。

## 相关 {#related}

对比 [25001 活动 SQL 事务](../25001/)、[25000 事务状态无效](../25000/) 和 [3B000 保存点异常](../3b000/)。

## 来源 {#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` (SHA-256 `9ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf`)
