sql >> Databáze >  >> RDS >> PostgreSQL

Jak rychle zrušit vnoření 2D pole do 1D pole v PostgreSQL?

Funkce, kterou jste našli v mé staré odpovědi, není vhodná pro velká pole. Nikdy mě nenapadla pole vaší velikosti, která by měla být pravděpodobně množinou (tabulkou).

Ať je to jakkoli, tato funkce plpgsql nahrazuje funkci v odkazovaném odpověď . Vyžaduje Postgres 9.1 nebo novější.

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 rychlejší v mém testu na velkém 2D poli v Postgres 9.6.

STRICT abyste se vyhnuli výjimce pro vstup NULL (jako komentoval IamIC ):



  1. Jak uložit odkaz v mysql?

  2. Jak funguje TIMESTAMP() v MariaDB

  3. MySQL objednává více směrů pomocí FIND_IN_SET

  4. Dotaz VB.NET a MySql UPDATE