sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo anular rápidamente una matriz 2d en una matriz 1d en PostgreSQL?

La función que encontró en mi respuesta anterior no se escala bien para matrices grandes. Nunca pensé en matrices de tu tamaño, que probablemente deberían ser un conjunto (una tabla) en su lugar.

Sea como fuere, esta función plpgsql reemplaza a la del referenciado responder . Requiere Postgres 9.1 o posterior.

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 veces más rápido en mi prueba en una gran matriz 2d en Postgres 9.6.

STRICT para evitar una excepción para la entrada NULL (como comentado por IamIC ):