Re: UNNEST and multidimensional arrays

From: Steve Midgley <science(at)misuse(dot)org>
To: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
Cc: Mike Martin <redtux1(at)gmail(dot)com>, pgsql-sql <pgsql-sql(at)lists(dot)postgresql(dot)org>
Subject: Re: UNNEST and multidimensional arrays
Date: 2020-07-30 15:30:30
Message-ID: CAJexoSLdcC1qY7z+qmJf1ZkMNFmCHz4oM2X9WKPYQhhnM3usNg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

On Thu, Jul 30, 2020 at 8:06 AM Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
wrote:

> Hi
>
> čt 30. 7. 2020 v 15:29 odesílatel Mike Martin <redtux1(at)gmail(dot)com> napsal:
>
>> Hi
>> Is there anyway to control how many levels unnest unnests?
>> ie: if I have (in perl) an array of arrays for unnest to only unnest the
>> top level, leaving the sub levels as an array, so a select would show
>> {val1,val2}
>> {val1,val2}
>> {val1,val2}
>> rather than
>> val1
>> val2
>> val1
>> val2
>> val1
>> val2
>>
>> Currently I am using a variation of the fooling code from postgres wiki
>> (from 2013)
>>
>
> there is not any other way
>
> Regards
>
> Pavel
>
>>
>> https://wiki.postgresql.org/wiki/Unnest_multidimensional_array
>>
>> CREATE OR REPLACE FUNCTION public.reduce_dim(
>> anyarray)
>> RETURNS SETOF anyarray
>> LANGUAGE 'plpgsql'
>>
>> COST 100
>> VOLATILE
>> ROWS 1000
>> AS $BODY$
>> DECLARE s $1%type;
>> BEGIN
>> IF cardinality ($1::text[]) >0 THEN
>> FOREACH s SLICE 1 IN ARRAY $1 LOOP
>> RETURN NEXT s;
>> END LOOP;
>> END IF;
>> RETURN;
>> END;
>> $BODY$;
>>
>> thanks in advance
>>
>> Mike
>>
>
Couldn't you write something in PLPerl (or really any procedural language)
to do what Perl does with Arrays in Postgres?
https://www.postgresql.org/docs/9.1/plperl.html

Steve

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Bhupendra Babu 2020-07-31 00:03:41 how to use function from different database
Previous Message Pavel Stehule 2020-07-30 15:05:59 Re: UNNEST and multidimensional arrays