PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie entschachtelt man in PostgreSQL schnell ein 2D-Array in ein 1D-Array?

Die Funktion, die Sie in meiner alten Antwort gefunden haben, skaliert nicht gut für große Arrays. Ich habe nie an Arrays Ihrer Größe gedacht, die stattdessen wahrscheinlich ein Set (eine Tabelle) sein sollten.

Wie dem auch sei, diese plpgsql-Funktion ersetzt die in referenzierte Antwort . Erfordert Postgres 9.1 oder höher.

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 schneller in meinem Test auf einem großen 2D-Array in Postgres 9.6.

STRICT um eine Ausnahme für die NULL-Eingabe zu vermeiden (als kommentiert von IamIC ):