【发布时间】:2013-02-08 06:04:08
【问题描述】:
所以我注意到当您取消引用只有一维的二维数组时,postgres (9.0) 不喜欢它。这是一个有趣的例子
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}
但是与此相关的很多事情让我对我的解决方案感到不安。有没有更好的方法来做到这一点?
【问题讨论】:
标签: arrays postgresql