我的目标是将array
,将其删除到包含unnest
的表中,然后将其聚合回array_agg
的数组中。为什么第一个DO
块失败而第二个块成功?
DO $$
DECLARE
x numrange[] := '{"[0, 3]", "[0, 1]", "[3, 5]", "[3, 8]"}';
BEGIN
x := (SELECT array_agg(x) FROM unnest(x));
RAISE NOTICE '%', x;
END;
$$;
DO $$
DECLARE
x numrange[] := '{"[0, 3]", "[0, 1]", "[3, 5]", "[3, 8]"}';
BEGIN
x := (SELECT array_agg(y) FROM unnest(x) AS y);
RAISE NOTICE '%', x;
END;
$$;
答案 0 :(得分:2)
列的第一个DO
名称为unnest
。您没有列x
。
DO $$
DECLARE
x numrange[] := '{"[0, 3]", "[0, 1]", "[3, 5]", "[3, 8]"}';
BEGIN
x := (SELECT array_agg(unnest) FROM unnest(x));
RAISE NOTICE '%', x;
END;
$$;
列的第二个DO
名称为y
,您可以在此列上执行string_agg()
。