Funktionen du hittade i mitt gamla svar kan inte skalas bra för stora arrayer. Jag har aldrig tänkt på arrayer i din storlek, som förmodligen borde vara en uppsättning (ett bord) istället.
Hur som helst så ersätter denna plpgsql-funktion den i referens svara . Kräver Postgres 9.1 eller senare.
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 gånger snabbare i mitt test på en stor 2d-array i Postgres 9.6.
STRICT
för att undvika ett undantag för NULL-inmatning (som kommenterad av IamIC
):