você pode usar uma subseleção?
postgres=# select ar[1], ar[2] from (select string_to_array('a b c', ' ') ar) as sq;
ar | ar
----+----
a | b
(1 row)
Isso ainda requer que você extraia explicitamente cada coluna (como você já faz). Se houver mais elementos na matriz do que extraídos, eles serão perdidos e, se houver menos, as colunas ausentes serão apenas
NULL
. EDIT:Acho que eu iria envolver a coisa toda em uma subseleção; a subseleção interna gera as linhas desejadas , com a seleção externa projetando a consulta interna nas colunas desejadas :
SELECT subquery1.a, subquery1.b, subquery1.c,
myfunction_result[1], myfunction_result[2]
FROM ( SELECT table1.a, table1.b, table1.c,
MyFunction(table1.a, table1.b, table1.c) as myfunction_result
FROM table1 INNER JOIN table2 using(b)
WHERE ... GROUP BY table1.a, table1.b, table1.c
) AS subquery1;
As seleções internas e externas correlacionarão corretamente a
table1
referências.