De functie die je in mijn oude antwoord hebt gevonden, schaalt niet goed voor grote arrays. Ik heb nooit aan arrays van jouw grootte gedacht, die in plaats daarvan waarschijnlijk een set (een tabel) zouden moeten zijn.
Hoe het ook zij, deze plpgsql-functie vervangt die in de verwezen antwoord . Vereist Postgres 9.1 of hoger.
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 sneller in mijn test op een grote 2d-array in Postgres 9.6.
STRICT
om een uitzondering voor NULL-invoer te voorkomen (als becommentarieerd door IamIC
):