Re: json_query - redundant result - Mailing list pgsql-hackers

From Pavel Stehule
Subject Re: json_query - redundant result
Date
Msg-id CAFj8pRB_fBXcGPDx0F9GeyjjWPhqGA+JSDih7cLm33DMx9RGyg@mail.gmail.com
Whole thread Raw
In response to Re: json_query - redundant result  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: json_query - redundant result  (Andrew Dunstan <andrew@dunslane.net>)
List pgsql-hackers


čt 28. 4. 2022 v 16:00 odesílatel Tom Lane <tgl@sss.pgh.pa.us> napsal:
Andrew Dunstan <andrew@dunslane.net> writes:
> On 2022-04-28 Th 04:16, Pavel Stehule wrote:
>> Is this result correct? I am expecting just [10, 30]

> It's just a wrapper around jsonb_path_query, which hasn't changed.

> # SELECT jsonb_path_query(jsonb '[{"a":10, "b": 20}, {"a": 30,
> "b":100}]', '$.**.a');
>  jsonb_path_query
> ------------------
>  10
>  30
>  10
>  30
> (4 rows)

> If that's a bug it's not a new one - release 14 gives the same result.

I'm pretty clueless in this area, but I think this might have to do with
the "lax mode" described in 9.16.2.1:

https://www.postgresql.org/docs/devel/functions-json.html#FUNCTIONS-SQLJSON-PATH

regression=# SELECT jsonb_path_query(jsonb '[{"a":10, "b": 20}, {"a": 30,
regression'# "b":100}]', '$.**.a');
 jsonb_path_query
------------------
 10
 30
 10
 30
(4 rows)

regression=# SELECT jsonb_path_query(jsonb '[{"a":10, "b": 20}, {"a": 30,
"b":100}]', 'strict $.**.a');
 jsonb_path_query
------------------
 10
 30
(2 rows)

Maybe these SQL-standard syntaxes ought to default to strict mode?

It looks like a perfect trap, although it is documented.

I don't think the default strict mode is better. Maybe disallow .** in lax mode?

Regards

Pavel

 

                        regards, tom lane

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: json_query - redundant result
Next
From: Peter Eisentraut
Date:
Subject: Re: Dump/Restore of non-default PKs