Re: is 8.4 array_agg() supposed to work with array values?

From: Peter Eisentraut <peter_e(at)gmx(dot)net>
To: pgsql-hackers(at)postgresql(dot)org
Cc: "Todd A(dot) Cook" <tcook(at)blackducksoftware(dot)com>
Subject: Re: is 8.4 array_agg() supposed to work with array values?
Date: 2009-01-20 05:09:34
Message-ID: 200901200709.34793.peter_e@gmx.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Jeff Davis 2009-01-20 05:14:19 Re: Review: B-Tree emulation for GIN
Previous Message Robert Haas 2009-01-20 04:57:14 Re: FWD: Re: Updated backslash consistency patch