跳转到主要内容

2203B — sql_json_number_not_found

PostgreSQL SQLSTATE 2203B 的来源与诊断参考。

2203B

速览

jsonpath 一元算术操作符要求数值操作数,却收到了其他类型的项。这是一元操作符边界,与数值转换方法分开。

字段
SQLSTATE 2203B
条件名 sql_json_number_not_found
状态 有效
已知存在于 12.0
锁定快照 12.22, 13.23, 14.24, 15.19, 16.15, 17.11, 18.6, 19beta3
ERRCODE_SQL_JSON_NUMBER_NOT_FOUND
别名

报文

固定的一元分支报告:

operand of unary jsonpath operator %s is not a numeric value

含义

executeUnaryArithmExpr 遍历操作数序列并接受其中每个数值标量项,对每项应用一元函数。只有同时满足 !found!hasNext 时才会跳过非数值项;这表示终止的存在性求值且不收集结果。其他情况下都会进入 2203B 检查条件,包括普通结果收集在终止步骤遇到非数值项时。lax 模式下执行器可能先解包数组。.number().integer() 等数值项方法使用 22036。

诊断

查看一元操作符名称和它之前的完整项序列。检查哪些项是数值、lax 解包是否改变了序列,以及调用方是在收集结果还是只在终止步骤做存在性判断。不要把它解释成数值越界或数值转换方法失败。

处理

约束路径使其得到预期的数值序列,规范化每个 JSON 值,或改用接受实际类型的操作。把终止的存在性/不收集结果优化作为单独的已知行为记录;普通结果收集仍要求每个被处理项都是数值。如果 ERROR 发生在显式事务中,应先 ROLLBACK 或回滚到既有保存点再重试;自动提交可重试修正后的动作。

版本

锁定目录从 12.0 起记录该条件;固定的一元算术分支来自 PostgreSQL 18.6。本页未声称有自然运行观察。

220362203822012

来源

完整的一元算术序列和非数值检查条件见 jsonpath_exec.c#L2158-2221。共享 strict/lax 与抛出/返回宏见 jsonpath_exec.c#L235-249。结构化证据记录绑定操作符首要报文和终止路径边界;本页未运行自然案例。