Re: is 8.4 array_agg() supposed to work with array values? - Mailing list pgsql-hackers

From Peter Eisentraut
Subject Re: is 8.4 array_agg() supposed to work with array values?
Date
Msg-id 200901200709.34793.peter_e@gmx.net
Whole thread Raw
In response to is 8.4 array_agg() supposed to work with array values?  ("Todd A. Cook" <tcook@blackducksoftware.com>)
Responses Re: is 8.4 array_agg() supposed to work with array values?
Re: is 8.4 array_agg() supposed to work with array values?
Re: is 8.4 array_agg() supposed to work with array values?
List pgsql-hackers
On Monday 19 January 2009 23:22:21 Todd A. Cook wrote:
> The docs at
> http://developer.postgresql.org/pgdocs/postgres/functions-aggregate.html
> don't prohibit using array values with array_arg(), so I assumed that it
> would work.

> test=> select array_agg(v.a) from (values (array[1,2]), (array[3,4])) as
> v(a) ; ERROR:  could not find array type for data type integer[]

Yeah ... This is one of the weirdnesses of the PostgreSQL array 
implementation.  integer[] and integer[][] etc. are actually the same type, 
just using a different number of dimensions internally.  This would work much 
better if integer[][] where "array of integer[]", in the same way as 
integer[] is "array of integer", in the way C deals with arrays.  This is 
also a main reason why composite types and arrays don't mix orthogonally; 
there is no way to represent that in the system catalogs.  To get back to 
your question, as far as array_agg() itself is concerned, it would probably 
work, but the rest of the sytem doesn't deal with it very well.  You will 
probably be able to find a number of other places that break when trying to 
derive the array type from something that is already an array.


pgsql-hackers by date:

Previous
From: Robert Haas
Date:
Subject: Re: FWD: Re: Updated backslash consistency patch
Next
From: Jeff Davis
Date:
Subject: Re: Review: B-Tree emulation for GIN