Este é um Postgres embutido desde algumas versões, então você não precisa mais definir o seu próprio, o nome é
array_agg()
. test=> select array_agg(n) from generate_series(1,10) n group by n%2;
array_agg
--------------
{1,3,5,7,9}
{2,4,6,8,10}
(este é o Postgres 8.4.8).
Observe que não há
ORDER BY
é especificado, então a ordem das linhas de resultado depende do método de agrupamento usado (aqui, hash), ou seja, não está definido. Exemplo:test=> select n%2, array_agg(n) from generate_series(1,10) n group by (n%2);
?column? | array_agg
----------+--------------
1 | {1,3,5,7,9}
0 | {2,4,6,8,10}
test=> select (n%2)::TEXT, array_agg(n) from generate_series(1,10) n group by (n%2)::TEXT;
text | array_agg
------+--------------
0 | {2,4,6,8,10}
1 | {1,3,5,7,9}
Agora, não sei por que você recebe
{10,2,4,6,8}
e {9,7,3,1,5}
, pois generate_series()
deve enviar as linhas em ordem.