2
所以我注意到,postgres(9.0)不喜歡它,當你解引用一維2d數組。這裏有一個有趣的例子解引用postgres二維數組
WITH my_table(arr) AS (VALUES (ARRAY[[10,11],[20,21]]))
SELECT arr[2][1] AS good, arr[1] AS bad FROM my_table;
good | bad
------+-----
20 |
(1 row)
正如你可以看到這個返回null
時不指定第二個維度。理想情況下,我希望它返回內部數組{10,11}
。因此,要解決這個問題,我寫這個功能
CREATE OR REPLACE FUNCTION deref_2d(orig_arr numeric[][], inner_arr int)
RETURNS numeric[] AS $$
DECLARE
index int;
len int;
return_arr numeric[];
BEGIN
len := array_upper(orig_arr,2);
FOR index IN 1 .. len LOOP
return_arr[index] := orig_arr[inner_arr][index];
END LOOP;
RETURN return_arr;
END
$$ LANGUAGE plpgsql;
現在我可以這樣寫:
這個WITH my_table(arr) AS (VALUES (ARRAY[[10,11],[20,21]]))
SELECT deref_2d(arr,1) FROM my_table;
deref_2d
----------
{10,11}
但多件事情讓我覺得不安我的解決方案。有一個更好的方法嗎?
陣列切片FTW!感謝您向我展示此語法。這在哪裏記錄?我只能找到大部分postgres細微差別的小例子(像這樣)。 – wesdotcool
@wesdotcool:在過去的12年裏,我一直在與Postgres合作,我學到了一些技巧。增加了手冊的鏈接。 –