我试图打开1d jsonb数组
[1, 2]
进入2d数组,其元素重复3次(结果可以在jsonb中)
[[1, 1, 1],
[2, 2, 2]]
我的尝试不起作用
select array(select array_fill(a::text::integer, array[3]))
from jsonb_array_elements('[1,2]'::jsonb) as a;
ERROR: could not find array type for data type integer[]
也许它可以在以后的PG版本中使用,但我仅限于PG 9.4.8
还有其他方法吗?
答案 0 :(得分:4)
首先,您需要将array()
替换为array_agg()
,然后从Postgres 9.5开始,您将获得所期望的结果。
话虽如此,您的问题是array_agg()
无法在9.5之前聚合数组。
然后是多个existing answers,但基本上你需要创建一个新的聚合函数array_agg_mul
:
CREATE AGGREGATE array_agg_mult (anyarray) (
SFUNC = array_cat,
STYPE = anyarray,
INITCOND = '{}'
);
然后运行以下查询应该有效:
SELECT
array_agg_mult(array[array_fill(a::text::integer, array[3])])
FROM jsonb_array_elements('[1,2]'::jsonb) as a;
然后你应该得到:
array_agg_mult
-------------------
{{1,1,1},{2,2,2}}