Tengo una función en PostgreSQL (PLPGSQL) que devuelve una matriz que contiene dos elementos. Cuando ejecuto una instrucción de selección llamada a la función, me sale una columna que contiene la matriz (como se esperaba):matriz de conversión PostgreSQL devuelta desde la función a las columnas
{1, 2}
Lo que realmente me gustaría hacer es extraer estos elementos para ser sus propias columnas:
[ 1 | 2 ]
he descubierto que puedo hacer:
SELECT (MyFunction())[1], (MyFunction())[2]
Pero eso llama a la función dos veces, por lo tanto, duplicando el tiempo de ejecución (esta función es una función muy lento). ¿Hay una mejor manera de manejar esto?
ACTUALIZACIÓN
Aquí es una réplica casi perfecta de lo que tengo:
SELECT table1.a, table1.b, table1.c, (MyFunction(table1.a, table1.b, table1.c))[1],
(MyFunction(table1.a, table1.b, table1.c))[2]
FROM table1
INNER JOIN table2 using(b)
WHERE ... GROUP BY table1.a, table1.b, table1.c;
De nuevo, esto produce las dos columnas de la matriz, pero mi función se llama dos veces, que dobla mi tiempo de ejecución.
que se nota que el número de elementos de la matriz de regresar será SIEMPRE 2 ... – lightningmanic
Si se conoce la forma del resultado devuelto, en caso de que ¿Volverá una matriz en absoluto?eso debería ser una fila. ¿Tiene la capacidad de refactorizar eso? – SingleNegationElimination