Thread: BUG #6326: SELECT ARRAY(SELECT ...) syntax and array[] results doesn't work

BUG #6326: SELECT ARRAY(SELECT ...) syntax and array[] results doesn't work

From
maxim.boguk@gmail.com
Date:
The following bug has been logged on the website:

Bug reference:      6326
Logged by:          Maksym Boguk
Email address:      maxim.boguk@gmail.com
PostgreSQL version: 9.1.1
Operating system:   Linux
Description:=20=20=20=20=20=20=20=20

SELECT ARRAY(SELECT ...)=20
doesn't work when subselect return any array.

Test case:

db=3D# SELECT ARRAY(SELECT 1 UNION ALL SELECT 2);
 ?column?
----------
 {1,2}

All good... now:

db=3D# SELECT ARRAY(SELECT array[1,2]::float[] UNION ALL SELECT
array[3,4]::float[]);
ERROR:  could not find array type for data type double precision[]
db=3D# SELECT ARRAY(SELECT array[1,2]::integer[] UNION ALL SELECT
array[3,4]::integer[]);
ERROR:  could not find array type for data type integer[]

Is that syntax supposed to work with anyarray types?
maxim.boguk@gmail.com writes:
> SELECT ARRAY(SELECT ...)
> doesn't work when subselect return any array.
> Is that syntax supposed to work with anyarray types?

No.

            regards, tom lane

Re: BUG #6326: SELECT ARRAY(SELECT ...) syntax and array[] results doesn't work

From
Maxim Boguk
Date:
On Mon, Dec 5, 2011 at 2:05 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

> maxim.boguk@gmail.com writes:
> > SELECT ARRAY(SELECT ...)
> > doesn't work when subselect return any array.
> > Is that syntax supposed to work with anyarray types?
>
> No.
>
>                        regards, tom lane
>

Hi.

Thank you very much for answer.

Ok the second problem (possible related to first becuse error is the same):

array_agg doesn't work with anyarray as well:

sports=# select array_agg(val) FROM (SELECT array[1,2]::integer[] as val
UNION ALL SELECT array[3,4]::integer[]) as t;
ERROR:  could not find array type for data type integer[]


PS: I try create two-dimentional integer array from  query results:

select val1::integer, val2::integer from somequery

to get integer[][] with content like:
[[val1-1,val1-2], [val2-1, val2-2], val[3-1, val3-2]... ]

Is there any way to perform that task it with reasonable efficiency?


--
Maxim Boguk
Senior Postgresql DBA.
Maxim Boguk <maxim.boguk@gmail.com> writes:
> PS: I try create two-dimentional integer array from  query results:

Well, you could do that with a suitably defined aggregate having the
signature "agg(anyarray) returns anyarray".  But array_agg has the
signature "array_agg(anyelement) returns anyarray" so you can't use
it on an array input.  2-D arrays are not distinct from 1-D arrays
so far as the type system is concerned.

            regards, tom lane