2013/12/2 Zev Benjamin <zev-pg...@strangersgate.com>

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

yes, it accept only constant - it is unpleasant, but it is necessary due
plpgsql internals :(

Regards

Pavel Stěhule


>
>
> 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-pg...@strangersgate.com
>> <mailto:zev-pg...@strangersgate.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@postgresql.org
>>     <mailto:pgsql-general@postgresql.org>)
>>
>>     To make changes to your subscription:
>>     http://www.postgresql.org/__mailpref/pgsql-general
>>     <http://www.postgresql.org/mailpref/pgsql-general>
>>
>>
>>
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>

Reply via email to