Funkce, kterou jste našli v mé staré odpovědi, není vhodná pro velká pole. Nikdy mě nenapadla pole vaší velikosti, která by měla být pravděpodobně množinou (tabulkou).
Ať je to jakkoli, tato funkce plpgsql nahrazuje funkci v odkazovaném odpověď . Vyžaduje Postgres 9.1 nebo novější.
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 rychlejší v mém testu na velkém 2D poli v Postgres 9.6.
STRICT
abyste se vyhnuli výjimce pro vstup NULL (jako komentoval IamIC
):