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

Hvordan unnest et 2d-array til et 1d-array hurtigt i PostgreSQL?

Den funktion, du fandt i mit gamle svar, kan ikke skaleres godt til store arrays. Jeg har aldrig tænkt på arrays din størrelse, som nok burde være et sæt (et bord) i stedet for.

Hvorom alting er, så erstatter denne plpgsql-funktion den i henviste svar . Kræver Postgres 9.1 eller nyere.

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 hurtigere i min test på et stort 2d-array i Postgres 9.6.

STRICT for at undgå en undtagelse for NULL-input (som kommenteret af IamIC ):



  1. Bestil rækkevalg efter flere kolonner

  2. Skal MEDIUMINT undgås i MySQL?

  3. Sorter 0-værdi database rækker efter ikke-nul rækker

  4. MySQL-valgsforespørgsel med variabel kolonnenavn