PostgreSQL:`unnest` 一个数组,然后`array_agg` 返回

PostgreSQL: `unnest` an array and then `array_agg` it back

我的目标是获取一个 array,用 unnest 将它解嵌到一个 table 中,然后用 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;
$$;

第一个 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()