PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como desaninhar um array 2d em um array 1d rapidamente no PostgreSQL?


A função que você encontrou na minha resposta antiga não é bem dimensionada para grandes matrizes. Eu nunca pensei em arrays do seu tamanho, que provavelmente deveriam ser um conjunto (uma tabela).

Seja como for, esta função plpgsql substitui a do referenciado resposta . Requer Postgres 9.1 ou 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;

40x mais rápido no meu teste em uma grande matriz 2d no Postgres 9.6.

STRICT para evitar uma exceção para entrada NULL (como comentado por IamIC ):