我在PostgreSQL(PLPGSQL)中有一個函數,它返回一個包含兩個元素的數組。當我運行一個select語句調用函數,我得到一個包含數組的列(如預期):PostgreSQL將函數返回的數組轉換爲列
{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;
再次,這將產生兩列從陣列中,但我的函數被調用了兩次,這使我的運行時間翻了一番。
我會注意到,返回數組中元素的數量始終是2 ... – lightningmanic
如果返回的結果的形狀是已知的,你應該返回一個數組呢?那應該可能是一排。你有能力重構嗎? – SingleNegationElimination