Re: jsonb_array_elements_recursive()
От | Pavel Stehule |
---|---|
Тема | Re: jsonb_array_elements_recursive() |
Дата | |
Msg-id | CAFj8pRDkHdPtq_E=cZ+zdmMqU=rsdiaCc3yuA4uXP7_4AFYpUQ@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: jsonb_array_elements_recursive() (Zhihong Yu <zyu@yugabyte.com>) |
Ответы |
Re: jsonb_array_elements_recursive()
|
Список | pgsql-hackers |
ne 7. 2. 2021 v 19:18 odesílatel Zhihong Yu <zyu@yugabyte.com> napsal:
Hi,bq. SELECT unnest('[[5,2],"a",[8,[3,2],6]]'::jsonb);Since the array without cast is not normal array (and would be rejected), I wonder if the cast is needed.Because casting to jsonb is the only legitimate interpretation here.
only until somebody does support for hstore, xml, ... some future data type
Minimally now, we have json, jsonb types.
Regards
Pavel
CheersOn Sun, Feb 7, 2021 at 9:42 AM Joel Jacobson <joel@compiler.org> wrote:On Sun, Feb 7, 2021, at 18:33, Zhihong Yu wrote:>Hi,># SELECT '[[5,2],"a",[8,[3,2],6]]'::jsonb;> jsonb>-------------------------------> [[5, 2], "a", [8, [3, 2], 6]]>(1 row)>>unnest(array[[3,2],"a",[1,4]]) is not accepted currently.>>Would the enhanced unnest accept the above array ?>>CheersYes, but only if the overloaded jsonb version of unnest() exists,and only if it's a jsonb array, not a normal array, like Pavel explained.Your example using a PoC PL/pgSQL:CREATE FUNCTION unnest(jsonb)RETURNS SETOF jsonbLANGUAGE plpgsqlAS $$DECLAREvalue jsonb;BEGINFOR value IN SELECT jsonb_array_elements($1) LOOPIF jsonb_typeof(value) <> 'array' THENRETURN NEXT value;ELSERETURN QUERYSELECT pit.jsonb_array_elements_recursive(value);END IF;END LOOP;END$$;SELECT unnest('[[5,2],"a",[8,[3,2],6]]'::jsonb);unnest--------52"a"8326(7 rows)Cheers,/Joel
В списке pgsql-hackers по дате отправления: