On Jan 20, 2024, at 12:34, Tom Lane <t...@sss.pgh.pa.us> wrote:

> It will take a predicate, but seems to always return true:
> 
> regression=# select '{"a":[1,2,3,4,5]}'::jsonb @? '$.a[*] < 5' ;
> ?column? 
> ----------
> t
> (1 row)
> 
> regression=# select '{"a":[1,2,3,4,5]}'::jsonb @? '$.a[*] > 5' ;
> ?column? 
> ----------
> t
> (1 row)

Just for the sake of clarity, this return value is “correct,” because @? and 
other functions and operators that expect SQL standard statements evaluate the 
SET returned by the JSONPath statement, but predicate check expressions don’t 
return a set, but a always a single scalar value (true, false, or null). From 
the POV of the code expecting SQL standard JSONPath results, that’s a set of 
one. @? sees that the set is not empty so returns true.

Best,

David



Reply via email to