PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment désimbriquer rapidement un tableau 2d dans un tableau 1d dans PostgreSQL ?

La fonction que vous avez trouvée dans mon ancienne réponse ne s'adapte pas bien aux grands tableaux. Je n'ai jamais pensé à des tableaux de votre taille, qui devraient probablement être un ensemble (une table) à la place.

Quoi qu'il en soit, cette fonction plpgsql remplace celle du référencé répondre . Nécessite Postgres 9.1 ou version ultérieure.

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 fois plus rapide dans mon test sur une grande baie 2d dans Postgres 9.6.

STRICT pour éviter une exception pour l'entrée NULL (comme commenté par IamIC ):