跳转到主要内容

2200F — zero_length_character_string

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

2200F

速览

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

字段
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
别名

含义

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

报文

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

诊断

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

处理

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

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

版本

锁定目录从 7.4 起记录该条件;固定源码覆盖 PostgreSQL 18.6。

2200122000

来源

固定 metaphone 源码:fuzzystrmatch.c#L253-287;独立的核心 lexeme guard 见 tsvector_op.c#L741-777。结构化证据记录保留两条消息和范围边界。本页未运行自然案例;实际 SQLSTATE 和报文仍是判断依据。