Hàm bạn tìm thấy trong câu trả lời cũ của tôi không mở rộng quy mô tốt cho các mảng lớn. Tôi chưa bao giờ nghĩ đến kích thước mảng của bạn, thay vào đó có lẽ nên là một tập hợp (một bảng).
Có thể như vậy, hàm plpgsql này thay thế hàm trong được tham chiếu câu trả lời . Yêu cầu Postgres 9.1 trở lên.
CREATE OR REPLACE FUNCTION unnest_2d_1d(ANYARRAY, OUT a ANYARRAY)
RETURNS SETOF ANYARRAY AS
$func$
BEGIN
FOREACH a SLICE 1 IN ARRAY $1 LOOP
RETURN NEXT;
END LOOP;
END
$func$ LANGUAGE plpgsql IMMUTABLE STRICT;
Nhanh hơn 40 lần trong thử nghiệm của tôi trên mảng 2d lớn trong Postgres 9.6.
STRICT
để tránh ngoại lệ cho đầu vào NULL (dưới dạng nhận xét bởi IamIC
):