PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL converte l'array restituito dalla funzione alle colonne

puoi usare una sottoselezione?

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

Ciò richiede comunque l'estrazione esplicita di ogni colonna (come già fai). Se ci sono più elementi nell'array di quelli estratti, andranno persi e, se ce ne sono meno, le colonne mancanti saranno semplicemente NULL .

EDIT:penso che avvolgerei il tutto in una sottoselezione; la sottoselezione interna genera le righe desiderate , con la selezione esterna che proietta la query interna nelle colonne desiderate :

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;

Le selezioni interne ed esterne correlano correttamente la table1 riferimenti.