sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres FOR LOOP

Procedure elementer som loops er ikke en del af SQL-sproget og kan kun bruges i brødteksten af ​​en proceduresprogfunktion, procedure (Postgres 11 eller nyere) eller en DO erklæring, hvor sådanne yderligere elementer er defineret af det respektive proceduresprog. Standarden er PL/pgSQL, men der er andre.

Eksempel 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$;

Til mange opgaver, der kan løses med en loop, er der en kortere og hurtigere sætbaseret løsning rundt om hjørnet. Ren SQL-ækvivalent for dit eksempel:

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() :

  • Hvad er den forventede adfærd for flere sæt-returnerende funktioner i SELECT-sætning?

Om optimering af ydeevne af tilfældige valg:

  • Bedste måde at vælge tilfældige rækker PostgreSQL


  1. Indlejrede klasser - CustomRowMapper !! Ikke et problem længere !! - Del 2

  2. Uncaught TypeError kan ikke kalde metoden 'opendatabase' for undefined-SQLite plugin med cordova 3.5

  3. SQLiteDatabase fejl sqlite:(1) nær ):syntaksfejl

  4. SQLite CROSS JOIN med et praktisk eksempel