sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur unnestrar man en 2d-array till en 1d-array snabbt i PostgreSQL?

Funktionen du hittade i mitt gamla svar kan inte skalas bra för stora arrayer. Jag har aldrig tänkt på arrayer i din storlek, som förmodligen borde vara en uppsättning (ett bord) istället.

Hur som helst så ersätter denna plpgsql-funktion den i referens svara . Kräver Postgres 9.1 eller senare.

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 gånger snabbare i mitt test på en stor 2d-array i Postgres 9.6.

STRICT för att undvika ett undantag för NULL-inmatning (som kommenterad av IamIC ):



  1. Boken "PostgreSQL 9.0 High Performance" är ute

  2. Hur undkommer man kommatecken i CSV-värden när man importerar tabell till MySQL?

  3. SSIS - Utföra en sökning på en annan tabell för att få relaterad kolumn

  4. Importera data från Excel till PostgreSQL