Re: Add SQL/JSON ON MISMATCH clause to JSON_VALUE - Mailing list pgsql-hackers

From Florents Tselai
Subject Re: Add SQL/JSON ON MISMATCH clause to JSON_VALUE
Date
Msg-id CA+v5N42K20N5+MBE8kPvZOiSyi=Yfrza+AHbMW9+_JvAGuKYSg@mail.gmail.com
Whole thread Raw
In response to Re: Add SQL/JSON ON MISMATCH clause to JSON_VALUE  (Florents Tselai <florents.tselai@gmail.com>)
List pgsql-hackers


On Sun, Jan 25, 2026 at 3:15 AM Florents Tselai <florents.tselai@gmail.com> wrote:
 

I've had trouble making JSON_QUERY work too, 
so I suspect that although my tests pass,
there may be something I'm missing in the executor side of things.

"For those curious, I found the issue: in ExecEvalJsonExprPath, I
 had misplaced the check for jsexpr->on_mismatch.  
I wasn't setting jsestate->escontext.details_wanted = true early enough.
 Without this, the soft error context wasn't capturing the specific SQL error code needed to identify the mismatch.

Attaching a v2 that implements ON MISMATCH for JSON_QUERY and JSON_TABLE too.

That said, the semantics of ON ERROR / MISMATCH / EMPTY are complex. 
I expect someone with access to and detailed knowledge of the standard might be able to poke holes in certain edge cases, particularly regarding precedence.

2 amendments to the commit message:

- This is  isn't in the SQL/JSON standard

But aligns with the semantics of Oracle that already provides such a clause [0]: 

- A TYPE ERROR is defined as "A JSON scalar value has a data type that is incompatible with the corresponding return SQL scalar data type." 
- Precedence logic: ON MISMATCH applies only when neither of the clauses ON EMPTY and ON ERROR applies. 
- Fallback Behavior: if the user doesn't specify ON MISMATCH, the coercion error is caught by ON ERROR.

pgsql-hackers by date:

Previous
From: Chao Li
Date:
Subject: Re: tablecmds: fix bug where index rebuild loses replica identity on partitions
Next
From: Corey Huinker
Date:
Subject: Re: Import Statistics in postgres_fdw before resorting to sampling.