čt 28. 4. 2022 v 16:00 odesílatel Tom Lane <t...@sss.pgh.pa.us> napsal:
> Andrew Dunstan <and...@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 >