Re: unnest on multi-dimensional arrays

From: Zev Benjamin <zev-pgsql(at)strangersgate(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: unnest on multi-dimensional arrays
Date: 2013-12-02 18:15:39
Message-ID: 529CCE4B.9090201@strangersgate.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hrm. Conceptually, I think you actually want something like:

CREATE OR REPLACE FUNCTION public.reduce_dim(anyarray)
RETURNS SETOF anyarray
LANGUAGE plpgsql
AS $function$
DECLARE
s $1%type;
d int;
BEGIN
d := array_ndims($1) - 1;
FOREACH s SLICE d IN ARRAY $1 LOOP
RETURN NEXT s;
END LOOP;
RETURN;
END;
$function$;

Otherwise,
select * from reduce_dim(ARRAY[[1], [2], [3]])
and
select * from reduce_dim(ARRAY[[[1], [2], [3]]);

produce the same results. Unfortunately, it looks like the SLICE
keyword only accepts a constant.

Zev

On 11/28/2013 02:28 AM, Pavel Stehule wrote:
> Hello
>
> postgres=# CREATE OR REPLACE FUNCTION public.reduce_dim(anyarray)
> RETURNS SETOF anyarray
> LANGUAGE plpgsql
> AS $function$
> DECLARE s $1%type;
> BEGIN
> FOREACH s SLICE 1 IN ARRAY $1 LOOP
> RETURN NEXT s;
> END LOOP;
> RETURN;
> END;
> $function$;
> CREATE FUNCTION
>
> postgres=# select reduce_dim(array[array[1, 2], array[2, 3]]);
> reduce_dim
> ------------
> {1,2}
> {2,3}
> (2 rows)
>
> Regards
>
> Pavel Stehule
>
> 2013/11/28 Zev Benjamin <zev-pgsql(at)strangersgate(dot)com
> <mailto:zev-pgsql(at)strangersgate(dot)com>>
>
> It appears that unnest, when called on a multi-dimensional array,
> effectively flattens the array first. For example:
>
> => select * from unnest(array[array[1, 2], array[2, 3]]);
> unnest
> --------
> 1
> 2
> 2
> 3
> (4 rows)
>
> while I would have expect something like the following:
>
> => select * from unnest(array[array[1, 2], array[2, 3]]);
> unnest
> --------
> {1, 2}
> {2, 3}
> (2 rows)
>
> Is there any way to get the latter behavior?
>
>
> Zev
>
>
> --
> Sent via pgsql-general mailing list (pgsql-general(at)postgresql(dot)org
> <mailto:pgsql-general(at)postgresql(dot)org>)
> To make changes to your subscription:
> http://www.postgresql.org/__mailpref/pgsql-general
> <http://www.postgresql.org/mailpref/pgsql-general>
>
>

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Pavel Stehule 2013-12-02 18:24:13 Re: unnest on multi-dimensional arrays
Previous Message Tom Lane 2013-12-02 17:59:41 Re: Trust intermediate CA for client certificates