考虑以下为例:
create table arr(id int,access int[]);
insert into arr values (1,'{0,1,0}'),(2,'{0,1,0}'),(3,'{0,0,9}');
所以该行将是:
id access
-- -------
1 {0,1,0}
2 {0,1,0}
3 {0,0,9}
现在一个函数可以来创建合并像下面阵列中的行:
CREATE
OR replace FUNCTION merge_array (
arrval INT -- the total number of values in an array in my example its 3, but 200 is for yours
,tbl TEXT --name of the table in which you want perform this function,
,col TEXT -- name of the array col
)
RETURNS setof INTEGER [] AS $$
DECLARE qry TEXT;
BEGIN
SELECT format('select translate(string_to_array(x.*::text,'','')::text,''()'','''')::int[] from (select %s from (select ' || col || ' ar from ' || tbl || ') as sq) as x ', egn)
INTO qry
FROM (
SELECT string_agg('max(ar[' || val || '])', ',') egn
FROM (
SELECT generate_series(1, arrval) val
) t
) tt;
RETURN QUERY
EXECUTE (qry);
END;$$
LANGUAGE plpgsql
用法:select merge_array(3,'arr','access')
结果:
merge_array
-----------
{0,1,9}
是,'每行(访问)'具有相同数量的值的 – DonSeba