PostgreSQL:`不需要`一个数组然后`array_agg`它回来了

时间:2015-11-27 09:34:39

标签: postgresql plpgsql

我的目标是将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;
$$;

1 个答案:

答案 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()