sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres FÖR LOOP

Procedur element som slingor är inte en del av SQL-språket och kan endast användas i kroppen av en procedurspråkfunktion, procedur (Postgres 11 eller senare) eller en DO uttalande, där sådana ytterligare element definieras av respektive procedurspråk. Standard är PL/pgSQL, men det finns andra.

Exempel med 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$;

För många uppgifter som kan lösas med en loop finns en kortare och snabbare uppsättningsbaserad lösning runt hörnet. Ren SQL-motsvarighet för ditt exempel:

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;

Om generate_series() :

  • Vad är det förväntade beteendet för flera set-returfunktioner i SELECT-satsen?

Om optimering av prestanda för slumpmässiga val:

  • Bästa sättet att välja slumpmässiga rader PostgreSQL


  1. Tabelluppslagningar i SortCL-kompatibla IRI-jobb

  2. Konvertera en juliansk dag till ett datum i PostgreSQL

  3. Jämför strängar som ignorerar accenter i SQL (ORACLE)

  4. SYSUTCDATETIME() vs GETUTCDATE() i SQL Server:Vad är skillnaden?