Funkcja, którą znalazłeś w mojej starej odpowiedzi, nie skaluje się dobrze dla dużych tablic. Nigdy nie myślałem o tablicach twojego rozmiaru, które prawdopodobnie powinny być zamiast tego zestawem (tabela).
Tak czy inaczej, ta funkcja plpgsql zastępuje tę w , do której się odwołuje odpowiedz . Wymaga Postgresa 9.1 lub nowszego.
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 szybciej w moim teście na dużej tablicy 2D w Postgresie 9.6.
STRICT
aby uniknąć wyjątku dla wejścia NULL (jak skomentowane przez IamIC
):