22025 — invalid_escape_sequence
22025
速览
转义序列对具体消费方无效。固定路径区分 LIKE 的 ESCAPE 参数既非空也非单字符、LIKE pattern 以转义字符结束、正则翻译器的转义参数长度规则,以及格式错误的 \u/\U Unicode 转义。
| 字段 | 值 |
|---|---|
| SQLSTATE | 22025 |
| 条件名 | invalid_escape_sequence |
| 状态 | 有效 |
| 已知存在于 | 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_INVALID_ESCAPE_SEQUENCE |
| 别名 | — |
代表性报文
代表性消费方使用以下首要文本和提示:
| 消费方/守卫 | 首要文本和提示 |
|---|---|
| LIKE 或 SQL 正则翻译的转义长度 | invalid escape string;HINT:Escape string must be empty or one character. |
| LIKE pattern 以转义符结尾 | LIKE pattern must not end with escape character |
| 扫描器发现格式错误的 Unicode 转义 | invalid Unicode escape;HINT:Unicode escapes must be \uXXXX or \UXXXXXXXX. |
含义
22025 由消费方自己的转义守卫发出。LIKE 要求 ESCAPE 字符串为空或一个字符,并拒绝以转义字符结尾的 pattern;SQL 正则翻译辅助函数对其转义参数也使用空字符串或单字符规则;核心扫描器对格式错误的 Unicode 转义给出 \uXXXX/\UXXXXXXXX 提示。这些情况不同于 22019 的转义字符语义和 2200C 的 SIMILAR 分隔符溢出;regexp_replace 的 option 或 start/occurrence 参数错误则是 22023 参数校验路径。
诊断
先确认消费方再修改反斜杠:LIKE ESCAPE 参数、LIKE pattern、SQL 正则翻译,还是扩展字符串字面量的 Unicode 扫描。检查转义值是否为空字符串或单字符、LIKE pattern 是否以转义符结尾,以及 Unicode 转义是否具备所需 \u/\U 长度。不要把所有正则替换或 SIMILAR 语法错误都叫作 22025,应以实际 SQLSTATE 和首要报文分类。
处理
按消费方要求提供转义字符串和 pattern,并保留有意使用的空字符串,不要将其理解为 SQL NULL。Unicode 语法错误应按扫描器要求使用 \uXXXX 或 \UXXXXXXXX。如果 ERROR 发生在显式事务中,应先 ROLLBACK 或回滚到既有保存点再重试;自动提交可重试修正后的语句。
版本
锁定目录从 7.4 起记录该条件;本页固定源码路径为 PostgreSQL 18.6。未声称本页有自然运行观察。
相关
来源
LIKE 守卫在 src/backend/utils/adt/like_match.c#L159-165 和 #L439-449;SQL 正则翻译的转义长度守卫见 src/backend/utils/adt/regexp.c#L793-805;格式错误的 Unicode 转义在 src/backend/parser/scan.l#L697-704。结构化证据记录保留确切首要报文、提示和消费方边界;本页未运行自然案例。