I have a function in PostgreSQL (PLPGSQL) that returns an array containing two elements. When I run a select statement calling the function, I get a column containing the array (as expected):
{1, 2}
What I really would like to do is extract these elements to be their own columns:
[ 1 | 2 ]
I have found that I can do:
SELECT (MyFunction())[1], (MyFunction())[2]
But that calls the function twice, therefore doubling the run time (this function is a very time-consuming function). Is there a better way to handle this?
UPDATE
Here is an almost perfect replica of what I have:
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;
Again, this produces the two columns from the array, but my function is called twice, which doubles my run time.