sql >> Base de Datos >  >> RDS >> PostgreSQL

Matriz de conversión de PostgreSQL devuelta de función a columnas

¿Puedes usar una subselección?

postgres=# select ar[1], ar[2] from (select string_to_array('a b c', ' ') ar) as sq;
 ar | ar 
----+----
 a  | b
(1 row)

Esto aún requiere que extraiga explícitamente cada columna (como ya lo hace). Si hay más elementos en la matriz que los extraídos, se perderán, y si hay menos, las columnas que faltan serán NULL .

EDITAR:creo que envolvería todo en una subselección; la subselección interna genera las filas deseadas , con la selección externa proyectando la consulta interna en las columnas deseadas :

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;

Las selecciones internas y externas correlacionarán correctamente la table1 referencias.