Die Funktion, die Sie in meiner alten Antwort gefunden haben, skaliert nicht gut für große Arrays. Ich habe nie an Arrays Ihrer Größe gedacht, die stattdessen wahrscheinlich ein Set (eine Tabelle) sein sollten.
Wie dem auch sei, diese plpgsql-Funktion ersetzt die in referenzierte Antwort . Erfordert Postgres 9.1 oder höher.
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 schneller in meinem Test auf einem großen 2D-Array in Postgres 9.6.
STRICT
um eine Ausnahme für die NULL-Eingabe zu vermeiden (als kommentiert von IamIC
):