# HV00B — fdw_invalid_handle

> PostgreSQL SQLSTATE HV00B 表示 FDW 或 SQL/MED 边界收到无效句柄；实际句柄的所有者与生命周期取决于已安装的包装器。
---

# HV00B — fdw_invalid_handle

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

`HV00B` 表示 FDW 包装器收到的句柄未知、已关闭，或对当前操作无效。对 PostgreSQL 18.6 核心与 contrib 调用的扫描没有解析出直接的 `HV00B` 报告组，因此句柄类型和具体消息取决于实现。

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

| 字段 | 值 |
| --- | --- |
| SQLSTATE | `HV00B` |
| 条件名 | `fdw_invalid_handle` |
| 状态 | `有效` |
| 已知存在于 | `9.1.0` |
| 锁定快照 | `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_FDW_INVALID_HANDLE` |
| 别名 | `—` |

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

## 含义 {#meaning}

SQL/MED 中的“句柄”是实现自己管理的引用，不是 PostgreSQL 关系 OID 或 SQL 事务 ID。包装器可能用句柄表示远端连接、游标、回复或执行对象；这些只是可能的例子，本批没有确认具体的发码包装器。仅凭类别定义无法判断具体是哪一种。

## 消息与诊断 {#messages}

在已检查的 18.6 核心与 contrib 路径中没有解析出直接的消息变体。应记录包装器名称和版本、句柄种类及生命周期、回调阶段、外部服务器和外部表，以及完整诊断信息。远端连接失败也可能使用其他 SQLSTATE。

## 诊断 {#diagnosis}

沿包装器源码追踪句柄的创建、传递、复用和关闭。检查扫描或修改回调是否晚于连接销毁，回调是否在清理后运行，以及包装器 ABI 是否与服务器匹配。不要把 NULL SQL 值推断为无效句柄。

## 处理 {#response}

按包装器 API 修复句柄生命周期，或重新建立包装器管理的连接或对象。如果无法确定写操作是否已经完成，应先查看远端日志再决定是否重试。重复提交相同请求通常不能修复陈旧或已关闭的句柄。

## 版本 {#versions}

`HV00B` 从 9.1.0 到 18.6 以及 19 Beta 3 均存在。可用的 9.1 之前定义扫描没有观察到它；这只是历史边界，不是精确的引入版本结论。

## 相关 {#related}

[`HV00K`](../hv00k/) 涉及回复句柄；[`HV009`](../hv009/) 涉及无效空指针使用；[`HV00N`](../hv00n/) 涉及建立连接。

## 来源 {#sources}

- [`errcodes.txt`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/errcodes.txt#L470) — 定义，SHA-256 `6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba`。
- [`fdwapi.h`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/include/foreign/fdwapi.h#L24-L55) — 回调边界。
- [结构化证据](../../data/evidence/hv00b.json) — 有界源码扫描。
