У меня есть функция в PostgreSQL (PLPGSQL), которая возвращает массив, содержащий два элемента. Когда я запускаю оператор выбора, вызывающий функцию, я получаю столбец, содержащий массив (как и ожидалось):
{1, 2}
Что я действительно хотел бы сделать, так это извлечь эти элементы в свои собственные столбцы:
[ 1 | 2 ]
Я обнаружил, что могу сделать:
SELECT (MyFunction())[1], (MyFunction())[2]
Но это вызывает функцию дважды, поэтому удваивает время выполнения (эта функция очень трудоемкая). Есть ли лучший способ справиться с этим?
UPDATE
Вот почти идеальная копия того, что у меня есть:
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;
Опять же, это дает два столбца из массива, но моя функция вызывается дважды, что удваивает время выполнения.