Where are we on this?  I still see this behavior.

---------------------------------------------------------------------------

On Fri, Jun 21, 2024 at 04:53:55PM +0800, jian he wrote:
> On Fri, Jun 21, 2024 at 11:11 AM David G. Johnston
> <david.g.johns...@gmail.com> wrote:
> >
> > On Thu, Jun 20, 2024 at 7:30 PM jian he <jian.universal...@gmail.com> wrote:
> >>
> >> "predicate check expressions return the single three-valued result of
> >>
> >> the predicate: true, false, or unknown."
> >> "unknown" is wrong, because `select 'unknown'::jsonb;` will fail.
> >> here "unknown" should be "null"? see jsonb_path_query doc entry also.
> >>
> >
> > The syntax for json_exists belies this claim (assuming our docs are 
> > accurate there).  Its "on error" options are true/false/unknown.  
> > Additionally, the predicate test operator is named "is unknown" not "is 
> > null".
> >
> > The result of the predicate test, which is never produced as a value, only 
> > a concept, is indeed "unknown" - which then devolves to false when it is 
> > practically applied to determining whether to output the path item being 
> > tested.  As it does also when used in a parth expression.
> >
> 
> in [1] says
> The similar predicate check expression simply returns true, indicating
> that a match exists:
> 
> => select jsonb_path_query(:'json', '$.track.segments[*].HR > 130');
>  jsonb_path_query
> ------------------
>  true
> 
> 
> ----------------------------------------
> but in this example
> select jsonb_path_query('1', '$ == "1"');
> return null.
> 
> I guess here, the match evaluation cannot be applied, thus returning null.
> 
> 
> So summary:
> if the boolean predicate check expressions are applicable, return true or 
> false.
> 
> the boolean predicate check expressions are not applicable, return null.
> example: select jsonb_path_query('1', '$ == "a"');
> 
> 
> but I found following two examples returning different results,
> i think they should return the same value.
> select json_value('1', '$ == "1"' returning jsonb error on error);
> select json_query('1', '$ == "1"' returning jsonb error on error);
> 
> [1] 
> https://www.postgresql.org/docs/devel/functions-json.html#FUNCTIONS-SQLJSON-CHECK-EXPRESSIONS
> 
> 

-- 
  Bruce Momjian  <br...@momjian.us>        https://momjian.us
  EDB                                      https://enterprisedb.com

  When a patient asks the doctor, "Am I going to die?", he means 
  "Am I going to die soon?"


Reply via email to