La funzione che hai trovato nella mia vecchia risposta non si adatta bene per i grandi array. Non ho mai pensato agli array della tua dimensione, che probabilmente dovrebbe essere invece un set (una tabella).
Comunque sia, questa funzione plpgsql sostituisce quella nel riferito rispondi . Richiede Postgres 9.1 o successivo.
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;
40 volte più veloce nel mio test su un grande array 2D in Postgres 9.6.
STRICT
per evitare un'eccezione per l'input NULL (come commentato da IamIC
):