# HV008 — fdw_invalid_column_number（外部列号无效）

> PostgreSQL SQLSTATE HV008 表示 FDW 描述符中的列序号无效。应检查本地到远端的列映射。
---

# HV008 — fdw_invalid_column_number

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

`HV008` 表示 FDW 描述符或回调收到超出范围的列序号。PostgreSQL 18.6 定义了它，但核心/contrib 扫描没有找到直接报告组或自带报文。

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

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

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

## 含义 {#meaning}

包装器使用的序号不在当前描述符范围内。这是映射/描述符问题，不代表列名缺失（`HV005`）或名称不合法（`HV007`）。

## 报文与诊断 {#messages}

没有确认的核心报文。保留序号、描述符宽度、本地关系、回调阶段以及包装器/远端元数据版本。

## 诊断 {#diagnosis}

比较目标列表、`pg_attribute.attnum` 和包装器远端列数组，检查 dropped 列、投影改写以及规划与执行之间的模式变化；然后查看实际包装器索引描述符的回调。

## 处理 {#response}

修正外部表映射或包装器的序号转换后重新规划语句。不要随意删列来掩盖问题，修复取决于错误序号来自哪个描述符边界。

## 版本 {#versions}

目录从 9.1.0 观察到该码，所有锁定正式快照至 18.6 及 19 Beta 3 均有；pre-9 定义文件未观察到。

## 相关 {#related}

[`HV005`](../hv005/) 是名称找不到；[`HV007`](../hv007/) 是名称无效；[`HV006`](../hv006/) 是类型描述符元数据无效。

## 来源 {#sources}

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