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

Postgres FOR LOOP

Procedurální prvky jako smyčky nejsou součástí jazyka SQL a lze je použít pouze v těle funkce procedurálního jazyka, procedury (Postgres 11 nebo novější) nebo DO prohlášení, kde jsou tyto dodatečné prvky definovány příslušným procedurálním jazykem. Výchozí je PL/pgSQL, ale existují i ​​​​jiné.

Příklad s plpgsql:

DO
$do$
BEGIN 
   FOR i IN 1..25 LOOP
      INSERT INTO playtime.meta_random_sample
         (col_i, col_id)                       -- declare target columns!
      SELECT  i,     id
      FROM   tbl
      ORDER  BY random()
      LIMIT  15000;
   END LOOP;
END
$do$;

Pro mnoho úloh, které lze vyřešit pomocí smyčky, existuje kratší a rychlejší set-based řešení za rohem. Čistý ekvivalent SQL pro váš příklad:

INSERT INTO playtime.meta_random_sample (col_i, col_id)
SELECT t.*
FROM   generate_series(1,25) i
CROSS  JOIN LATERAL (
   SELECT i, id
   FROM   tbl
   ORDER  BY random()
   LIMIT  15000
   ) t;

O generate_series() :

  • Jaké je očekávané chování pro více funkcí vracejících sadu v klauzuli SELECT?

O optimalizaci výkonu náhodných výběrů:

  • Nejlepší způsob, jak vybrat náhodné řádky PostgreSQL


  1. Síťový adaptér nemohl navázat připojení při připojování k Oracle DB

  2. Proč se mé připojení ODBC nezdaří při spuštění načtení SSIS v sadě Visual Studio, ale ne při spuštění stejného balíčku pomocí nástroje Execute Package Utility

  3. Instalace Oracle Fusion Middleware / WebLogic Server 11g

  4. Jak opravit chybu MySQL 1064