# 2200F — zero_length_character_string

> PostgreSQL SQLSTATE 2200F 的来源与诊断参考。
---

# 2200F

## 速览 {#at-a-glance}
该条件表示某项操作拒绝空字符字符串。在固定的 `fuzzystrmatch` 路径中，`metaphone` 会先对空输入返回空文本；只有经过这个提前返回后才读取 `reqlen`，非正的请求输出长度才会报告 `output cannot be empty string`。另一个核心 `array_to_tsvector` 路径会拒绝空 lexeme，因此必须结合报文和函数判断。

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

| 字段 | 值 |
| --- | --- |
| SQLSTATE | `2200F` |
| 条件名 | `zero_length_character_string` |
| 状态 | `有效` |
| 已知存在于 | `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_ZERO_LENGTH_CHARACTER_STRING` |
| 别名 | `—` |

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

## 含义 {#meaning}
本条件用于某项操作的输入要求不允许空字符字符串的情况。固定路径有不同 guard：`metaphone(text, reqlen)` 先在输入为空时返回空文本；对非空输入才检查 `reqlen`，`reqlen <= 0` 时触发 2200F。`array_to_tsvector(text[])` 则独立拒绝长度为零的元素。两条路径都不能证明每个空 SQL 字符串都会产生 2200F。

## 报文 {#messages}

`metaphone` guard 以 `ERROR` 严重性报告 primary：`output cannot be empty string`；`array_to_tsvector` lexeme guard 以 `ERROR` 报告 primary：`lexeme array may not contain empty strings`。引用分支没有独立 DETAIL 或 HINT。

## 诊断 {#diagnosis}
如果报文指向 `metaphone`，检查传入文本和请求输出长度：空输入在检查 `reqlen` 前返回空结果，只有非空输入的非正长度才会触发 2200F。如果报文指向 `array_to_tsvector`，检查每个 lexeme 是否为空，并区分使用 22004 的 NULL lexeme。若报文不同，先定位其中点名的子系统；不要为了消除条件而随意填充输出。

## 处理 {#response}
明确处理报文所指函数的输入要求：为非空 `metaphone` 输入选择正的输出长度，或在 `array_to_tsvector` 前移除/修正空 lexeme。函数允许时保留有意的空输入语义；不要只为压制代码而填充数据。

该分支抛出 `ERROR` 时，显式事务应先用 `ROLLBACK` 恢复，或对语句前已建立的保存点执行 `ROLLBACK TO SAVEPOINT`，再重试；自动提交下只在失败语句结束后重试修正后的动作。事务边界规则见[事务与重试指南](../guides/)。

## 版本 {#versions}
锁定目录从 7.4 起记录该条件；固定源码覆盖 PostgreSQL 18.6。

## 相关 {#related}
[`22001`](../22001/)、[`22000`](../22000/)

## 来源 {#sources}
固定 `metaphone` 源码：[`fuzzystrmatch.c#L253-287`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/contrib/fuzzystrmatch/fuzzystrmatch.c#L253-L287)；独立的核心 lexeme guard 见 [`tsvector_op.c#L741-777`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/adt/tsvector_op.c#L741-L777)。结构化[证据记录](../../data/evidence/2200f.json)保留两条消息和范围边界。本页未运行自然案例；实际 SQLSTATE 和报文仍是判断依据。
