2203A — sql_json_member_not_found
A named JSON object member cannot be read from the current item. Fixed jsonpath member access distinguishes a missing key from a non-object receiver.
English manual coverage begins with PostgreSQL 8.1. Source history and runtime observations have their own recorded version boundaries.
Reading PG 18·Select a recorded version
- aliases
- Unknown
- class name
- Data Exception
- condition name
- sql_json_member_not_found
- lang
- en
- sqlstate
- 2203A
Definition PG 18
2203A
At a glance {#at-a-glance}
A named JSON object member cannot be read from the current item. Fixed jsonpath member access distinguishes a missing key from a non-object receiver.
Messages {#messages}
Representative primary texts are:
| Guard | Primary |
| --- | --- |
| Named key is absent from an object | JSON object does not contain key "%s" |
| Member accessor receives a non-object | jsonpath member accessor can only be applied to an object |
Meaning {#meaning}
The jpiKey branch searches the current JSON object for the requested key. A missing key raises 2203A in a throwing context; a scalar or other non-object receiver uses the same SQLSTATE with the object-type primary. If structural errors are ignored, the mismatch can be skipped, and if the context is non-throwing the path returns an error result for its caller to handle. This is the named-member boundary; wildcard member access and .keyvalue() use the object-only 2203C path.
Diagnosis {#diagnosis}
Keep the requested key, the item immediately before the member accessor, and the path mode. A missing key may reflect document shape, while a non-object receiver means the path reached the wrong type. Do not turn a missing member into 22035 no-item or a wildcard/object-method mismatch into 2203C without reading the primary.
Response {#response}
Correct the key or normalize/branch on the document shape. Use the path's documented lax or error behavior only when a missing member is an intended input case. If an ERROR occurred in an explicit transaction, roll back or roll back to the existing savepoint before retrying; autocommit can retry the corrected action.
Versions {#versions}
The locked catalogue records this condition from 12.0; the fixed named-member guards are PostgreSQL 18.6. No natural runtime observation is claimed for this page.
Related {#related}
Sources {#sources}
The fixed named-member lookup, missing-key, non-object, and structural-error branches are jsonpath_exec.c#L1012-1055. The shared strict/lax and throw-return macros are jsonpath_exec.c#L235-249. The structured evidence record binds both exact primaries; no natural runtime was run.
Compare versions
SQLSTATE evidence and recorded runtime versions
claims · identity
{
"claim_id": "identity",
"limits": "",
"method": "Read fixed definition.",
"position": 0,
"runtime": [],
"sources": [
"src.errcodes.18.6"
],
"statement": "2203A is sql_json_member_not_found in SQLSTATE Class 22."
}claims · resolved-path
{
"claim_id": "resolved-path",
"limits": "Source confirmation is not a natural runtime observation.",
"method": "Read the complete jpiKey member lookup, missing-key branch, non-object branch, and structural-error suppression.",
"position": 1,
"runtime": [],
"sources": [
"src.jsonpath.member-accessor",
"src.jsonpath.context-flags",
"src.jsonpath.execute-context"
],
"statement": "The fixed named-member jsonpath accessor looks up a key on an object and reports 2203A when the key is absent or the accessor receives a non-object item, unless structural errors are being ignored. A non-throwing jsonpath context can return a path error result; the actual ERROR path carries either the missing-key primary or the object-type primary."
}claims · history
{
"claim_id": "history",
"limits": "",
"method": "Use catalogue boundary.",
"position": 2,
"runtime": [],
"sources": [
"src.errcodes.18.6"
],
"statement": "The locked catalogue records 2203A from 12.0 without proving exact implementation introduction."
}messages · message.missing-key
{
"limits": "",
"message_id": "message.missing-key",
"path": "",
"position": 0,
"raw": {
"id": "message.missing-key",
"primary_template": "JSON object does not contain key \"%s\"",
"severity_source": "ERROR",
"sources": [
"src.jsonpath.member-accessor"
],
"sqlstate": "2203A"
},
"severity": "ERROR",
"sources": [
"src.jsonpath.member-accessor"
],
"templates": [
{
"kind": "primary",
"literal": "JSON object does not contain key \" \"",
"position": 0,
"role": "",
"template": "JSON object does not contain key \"%s\""
}
]
}messages · message.member-object
{
"limits": "",
"message_id": "message.member-object",
"path": "",
"position": 1,
"raw": {
"id": "message.member-object",
"primary_template": "jsonpath member accessor can only be applied to an object",
"severity_source": "ERROR",
"sources": [
"src.jsonpath.member-accessor"
],
"sqlstate": "2203A"
},
"severity": "ERROR",
"sources": [
"src.jsonpath.member-accessor"
],
"templates": [
{
"kind": "primary",
"literal": "jsonpath member accessor can only be applied to an object",
"position": 0,
"role": "",
"template": "jsonpath member accessor can only be applied to an object"
}
]
}sources · src.errcodes.18.6
{
"commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
"docs_url": "",
"kind": "upstream_source",
"location": "",
"path": "src/backend/utils/errcodes.txt",
"position": 0,
"sha256": "6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba",
"source_id": "src.errcodes.18.6",
"tag": "REL_18_6",
"url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/errcodes.txt#L225"
}sources · src.jsonpath.member-accessor
{
"commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
"docs_url": "",
"kind": "upstream_source",
"location": "",
"path": "src/backend/utils/adt/jsonpath_exec.c",
"position": 1,
"sha256": "678cb8947f0b5e6ad14524f1863987ab99641cfb5f81121fc5c5006af0319d02",
"source_id": "src.jsonpath.member-accessor",
"tag": "REL_18_6",
"url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/adt/jsonpath_exec.c#L1012"
}sources · src.jsonpath.context-flags
{
"commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
"docs_url": "",
"kind": "upstream_source",
"location": "",
"path": "src/backend/utils/adt/jsonpath_exec.c",
"position": 2,
"sha256": "678cb8947f0b5e6ad14524f1863987ab99641cfb5f81121fc5c5006af0319d02",
"source_id": "src.jsonpath.context-flags",
"tag": "REL_18_6",
"url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/adt/jsonpath_exec.c#L235"
}sources · src.jsonpath.execute-context
{
"commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
"docs_url": "",
"kind": "upstream_source",
"location": "",
"path": "src/backend/utils/adt/jsonpath_exec.c",
"position": 3,
"sha256": "678cb8947f0b5e6ad14524f1863987ab99641cfb5f81121fc5c5006af0319d02",
"source_id": "src.jsonpath.execute-context",
"tag": "REL_18_6",
"url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/adt/jsonpath_exec.c#L654"
}Source references
Full definition and evidence JSON
Definition sources
center · PostgreSQL 18 · english-manuals:87f92d08840f7cc0f718577360434bdca2d55eb748d454b9e0013d6923d47cb4
Text language: en · english-manuals:87f92d08840f7cc0f718577360434bdca2d55eb748d454b9e0013d6923d47cb4