Re: jsonb_array_elements_recursive()

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
>>
>

In response to

Responses

Browse pgsql-hackers by date

  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()