sql >> Database >  >> RDS >> PostgreSQL

Hoe maak je een 2D-array snel in PostgreSQL in een 1d-array?

De functie die je in mijn oude antwoord hebt gevonden, schaalt niet goed voor grote arrays. Ik heb nooit aan arrays van jouw grootte gedacht, die in plaats daarvan waarschijnlijk een set (een tabel) zouden moeten zijn.

Hoe het ook zij, deze plpgsql-functie vervangt die in de verwezen antwoord . Vereist Postgres 9.1 of hoger.

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 sneller in mijn test op een grote 2d-array in Postgres 9.6.

STRICT om een ​​uitzondering voor NULL-invoer te voorkomen (als becommentarieerd door IamIC ):



  1. Kan ik de slaapstand-querytaal gebruiken voor entiteiten die niet aan een tabel zijn toegewezen?

  2. tsvector ondersteunt alleen Engels?

  3. Byte[]-array invoegen als blob in Oracle Database krijgt ORA-01460:niet-geïmplementeerde of onredelijke conversie gevraagd

  4. Hoe velden op naam te krijgen in query Python?