PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come disnidificare rapidamente un array 2d in un array 1d in PostgreSQL?

La funzione che hai trovato nella mia vecchia risposta non si adatta bene per i grandi array. Non ho mai pensato agli array della tua dimensione, che probabilmente dovrebbe essere invece un set (una tabella).

Comunque sia, questa funzione plpgsql sostituisce quella nel riferito rispondi . Richiede Postgres 9.1 o successivo.

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 volte più veloce nel mio test su un grande array 2D in Postgres 9.6.

STRICT per evitare un'eccezione per l'input NULL (come commentato da IamIC ):