# 08000 — 连接异常（connection_exception）

> PostgreSQL SQLSTATE 08000（连接异常，connection_exception）的源码证据、诊断与处理参考。
---

# 08000 — 连接异常

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

SQLSTATE `08000` 是 Class `08` 中的 **connection_exception**。连接异常是一个宽泛的连接管理条件。固定 PostgreSQL 路径中，`postgres_fdw` 会在中止清理失败、外部服务器连接不可再用时使用它；单纯的客户端拒绝连接不足以证明此码。

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

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

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

## 含义 {#meaning}

连接异常是一个宽泛的连接管理条件。固定 PostgreSQL 路径中，`postgres_fdw` 会在中止清理失败、外部服务器连接不可再用时使用它；单纯的客户端拒绝连接不足以证明此码。

## 诊断 {#diagnosis}

检查服务器日志、外部服务器名、后端 PID、事务结果和 FDW 清理路径。将报文与 08001（无法建立连接）和 08006（已有连接失败）区分；客户端库可能返回另一种异常，甚至没有 SQLSTATE。

## 处理 {#response}

修复外部连接或清理条件，按具体路径结束失败事务；只有确认远端结果后，才重试完整且安全的业务单元。不要把普通网络异常改标为 08000。

## 报文 {#messages}

固定的 `postgres_fdw` 分支以 `ERROR` 发出主报文 `connection to server "%s" cannot be used due to abort cleanup failure`，外部服务器名是动态值。这个源码变体比普通客户端 socket 拒绝更具体。

## 代表案例 {#case}

本页没有选定的自然 SQL 运行。结构化证据记录的是源码或定义边界；客户端 `RAISE` 不能代表服务器机制。

## 版本 {#versions}

上面的生成事实表记录锁定的目录快照和最早观察到的定义。本页没有选定的自然 SQL 运行；固定的 REL_18_6/REL_10_23 源码边界不能当作实测结果，也不能据此推断所有中间版本的行为。

## 相关 {#related}

- [`08001` — sqlclient_unable_to_establish_sqlconnection](../08001/)
- [`08006` — connection_failure](../08006/)
- [`08007` — transaction_resolution_unknown](../08007/)

## 来源 {#sources}

- `src.fdw-connection.18.6` — `contrib/postgres_fdw/connection.c` at `REL_18_6` commit `724edf9bde9d356724ad384a2e196edc3c9f80f7`; fixed blob SHA-256 `67fc002657f2c7df6d93cbf99c933cbc103907d1857ed77aedbb85099ea4dda0` ([source](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/contrib/postgres_fdw/connection.c#L1369-L1372)).
- `src.fdw-connection.10.23` — `contrib/postgres_fdw/connection.c` at `REL_10_23` commit `02991e79f8f58bc208f05dcc8af0c62dbe0a6ea4`; fixed blob SHA-256 `8a8b053e4ef599d95d0709744aa1dd5bb20047af9dc29b3f42cfba5785e525c5` ([source](https://github.com/postgres/postgres/blob/02991e79f8f58bc208f05dcc8af0c62dbe0a6ea4/contrib/postgres_fdw/connection.c#L1033-L1036)).
- `src.calls.REL_18_6` / `src.calls.REL_10_23` — fixed local call scans, SHA-256 `9ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf` / `00d16d3eb01b71ccf1b245c8f3102f9d0ec9f36fb02777b8dd1b99fcb263040c`; these scans preserve the resolved call context used by the claims.
