# 2203A — sql_json_member_not_found

> PostgreSQL SQLSTATE 2203A 的来源与诊断参考。
---

# 2203A

## 速览 {#at-a-glance}
无法从当前 JSON 项中读取指定的对象成员。固定 jsonpath 成员访问区分键不存在与接收项不是对象。

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

| 字段 | 值 |
| --- | --- |
| SQLSTATE | `2203A` |
| 条件名 | `sql_json_member_not_found` |
| 状态 | `有效` |
| 已知存在于 | `12.0` |
| 锁定快照 | `12.22, 13.23, 14.24, 15.19, 16.15, 17.11, 18.6, 19beta3` |
| 宏 | `ERRCODE_SQL_JSON_MEMBER_NOT_FOUND` |
| 别名 | `—` |

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

## 报文 {#messages}
代表性首要报文如下：

| 触发条件 | 首要报文 |
| --- | --- |
| 对象中没有指定键 | `JSON object does not contain key "%s"` |
| 成员访问器收到非对象 | `jsonpath member accessor can only be applied to an object` |

## 含义 {#meaning}
`jpiKey` 分支会在当前 JSON 对象中查找请求的键。在会抛错的上下文中，键不存在会报告 2203A；标量或其他非对象接收项也使用本码，但首要报文不同。忽略结构错误时可以跳过这种不匹配；非抛错上下文则会把路径错误结果交给调用方处理。这是具名成员边界；通配成员访问和 `.keyvalue()` 使用只接受对象的 2203C 路径。

## 诊断 {#diagnosis}
保留请求的键、成员访问器前一步收到的项，以及路径模式。键不存在可能是文档形状问题；非对象接收项则表示路径到达了错误类型。没有读取首要报文时，不要把成员缺失归为 22035 无项，或把通配/对象方法不匹配归为 2203C。

## 处理 {#response}
修正键名，或按文档形状规范化并显式分支。只有当成员缺失确实是预期输入时，才使用路径文档规定的 lax 或错误处理行为。如果 ERROR 发生在显式事务中，应先 ROLLBACK 或回滚到既有保存点再重试；自动提交可重试修正后的动作。

## 版本 {#versions}
锁定目录从 12.0 起记录该条件；固定的具名成员 检查条件来自 PostgreSQL 18.6。本页未声称有自然运行观察。

## 相关 {#related}
[`22039`](../22039/)、[`2203C`](../2203c/)、[`22035`](../22035/)

## 来源 {#sources}
具名成员查找、键缺失、非对象和结构错误分支见 [`jsonpath_exec.c#L1012-1055`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/adt/jsonpath_exec.c#L1012)。共享 strict/lax 与抛出/返回宏见 [`jsonpath_exec.c#L235-249`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/adt/jsonpath_exec.c#L235)。结构化[证据记录](../../data/evidence/2203a.json)绑定两条准确首要报文；本页未运行自然案例。
