PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL converte array retornado da função para colunas


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.