# HV004 — fdw_invalid_data_type（外部数据包装器数据类型无效）

> PostgreSQL SQLSTATE HV004 表示 FDW 数据类型不匹配。应确认包装器类型映射和外部表定义。
---

# HV004 — fdw_invalid_data_type

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

`HV004` 表示 FDW 无法使用某个数据类型。18.6 核心及 contrib 调用扫描没有解析出直接报告组，因此不能指定自带包装器报文或自然 SQL 触发器。

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

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

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

## 含义 {#meaning}

包装器可能拒绝本地列类型、远端类型映射或值转换。FDW 文档说明，类型不匹配时可以报告错误，但没有规定统一映射或报文；不能把每个类型转换失败都归为此码。

## 报文与诊断 {#messages}

没有确认的 18.6 核心报文。保留 `M/D/H`、源码函数、操作阶段、本地列类型、远端类型和包装器版本；远端服务器的类型错误要和包装器本地 SQLSTATE 区分。

## 诊断 {#diagnosis}

确认列和转换方向，查看固定版本包装器的校验器、deparser 与元组转换代码，并比较本地目录类型、必要的 typmod/collation 和远端元数据。不要从通用 cast 或 `22xxx` 推断 `HV004`。

## 处理 {#response}

选择包装器支持的类型映射，或在确认数据兼容后修改外部表定义。若转换由外部扩展实现，应按兼容契约升级或配置；相同元数据下错误是确定性的，不能靠重试解决。

## 版本 {#versions}

目录从 9.1.0 观察到该码，延续到 18.6 与 19 Beta 3；pre-9 定义扫描未观察到它，精确引入版本未知。

## 相关 {#related}

[`HV006`](../hv006/) 是类型描述符不一致；[`HV007`](../hv007/) 是列名无效；[`42804`](../42804/) 是核心类型不匹配，边界不同。

## 来源 {#sources}

- [`errcodes.txt`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/errcodes.txt#L467-L468) — 定义，SHA-256 `6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba`。
- [`FDW callback documentation`](https://www.postgresql.org/docs/18/fdwhandler.html#FDW-CALLBACKS-SCAN) — 类型转换和错误边界。
- [结构化证据](../../data/evidence/hv004.json) — 有界扫描与来源边界。
