A função que você encontrou na minha resposta antiga não é bem dimensionada para grandes matrizes. Eu nunca pensei em arrays do seu tamanho, que provavelmente deveriam ser um conjunto (uma tabela).
Seja como for, esta função plpgsql substitui a do referenciado resposta . Requer Postgres 9.1 ou posterior.
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 mais rápido no meu teste em uma grande matriz 2d no Postgres 9.6.
STRICT
para evitar uma exceção para entrada NULL (como comentado por IamIC
):