Search Postgresql Archives

Re: array_agg problem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Aug 19, 2011 at 4:22 PM, TJ O'Donnell <tjo@xxxxxxx> wrote:
> array_agg says it can take any type of arg, but this seems not to work
> when the arg in an integer array.
>
> create temp table x(name text, val integer[]);
> insert into x values('a',array[1,2,3]);
> insert into x values('b',array[3,4,5]);
> select * from x;
> select max(val), min(val) from x;
> select array_agg(val) from x;
>
> Well, everything works except the last statement.  In 8.4 I get
> ERROR:  could not find array type for data type integer[]
>
> I was hoping for [1,2,3,4,5] or at least [1,2,3,3,4,5] or even [[1,2,3],[3,4,5]]
> Am I not understanding something?

yeah basically -- it's a common misunderstanding.  array_agg converts
elements to arrays, but not arrays to array of dimension + 1.  you
could do this:

select array(select unnest(val) from x);

to get [1,2,3,3,4,5].

Getting [[1,2,3],[3,4,5]] is a little harder:
create aggregate array_stack(int[])
(
  sfunc=array_cat,
  stype=int[]
);

postgres=# select array_stack(array[val]) from x;
    array_stack
-------------------
 {{1,2,3},{3,4,5}}
(1 row)

merlin

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux