From: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
---|---|
To: | Zhihong Yu <zyu(at)yugabyte(dot)com> |
Cc: | Joel Jacobson <joel(at)compiler(dot)org>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, PostgreSQL Developers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: jsonb_array_elements_recursive() |
Date: | 2021-02-07 18:38:39 |
Message-ID: | CAFj8pRDkHdPtq_E=cZ+zdmMqU=rsdiaCc3yuA4uXP7_4AFYpUQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
ne 7. 2. 2021 v 19:18 odesílatel Zhihong Yu <zyu(at)yugabyte(dot)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
>
> Cheers
>
> On Sun, Feb 7, 2021 at 9:42 AM Joel Jacobson <joel(at)compiler(dot)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 ?
>> >
>> >Cheers
>>
>> Yes, 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 jsonb
>> LANGUAGE plpgsql
>> AS $$
>> DECLARE
>> value jsonb;
>> BEGIN
>> FOR value IN SELECT jsonb_array_elements($1) LOOP
>> IF jsonb_typeof(value) <> 'array' THEN
>> RETURN NEXT value;
>> ELSE
>> RETURN QUERY
>> SELECT pit.jsonb_array_elements_recursive(value);
>> END IF;
>> END LOOP;
>> END
>> $$;
>>
>> SELECT unnest('[[5,2],"a",[8,[3,2],6]]'::jsonb);
>> unnest
>> --------
>> 5
>> 2
>> "a"
>> 8
>> 3
>> 2
>> 6
>> (7 rows)
>>
>> Cheers,
>>
>> /Joel
>>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2021-02-07 18:55:00 | Re: Support tab completion for upper character inputs in psql |
Previous Message | Zhihong Yu | 2021-02-07 18:20:29 | Re: jsonb_array_elements_recursive() |