Fungsi yang Anda temukan di jawaban lama saya tidak berskala dengan baik untuk array besar. Saya tidak pernah memikirkan array ukuran Anda, yang mungkin seharusnya menjadi satu set (tabel) sebagai gantinya.
Bagaimanapun, fungsi plpgsql ini menggantikan yang ada di direferensikan jawab . Memerlukan Postgres 9.1 atau lebih baru.
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;
40x lebih cepat dalam pengujian saya pada array 2d besar di Postgres 9.6.
STRICT
untuk menghindari pengecualian untuk input NULL (sebagai dikomentari oleh IamIC
):