sql >> Database >  >> RDS >> PostgreSQL

Postgres VOOR LUS

Procedureel elementen zoals loops maken geen deel uit van de SQL-taal en kunnen alleen worden gebruikt binnen de hoofdtekst van een proceduretaalfunctie, procedure (Postgres 11 of hoger) of een DO verklaring, waarbij dergelijke aanvullende elementen worden gedefinieerd door de respectieve proceduretaal. De standaard is PL/pgSQL, maar er zijn andere.

Voorbeeld met 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$;

Voor veel taken die met een lus kunnen worden opgelost, is er een kortere en snellere set-based oplossing om de hoek. Pure SQL-equivalent voor uw voorbeeld:

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;

Over generate_series() :

  • Wat is het verwachte gedrag voor functies die meerdere sets retourneren in de SELECT-component?

Over het optimaliseren van de prestaties van willekeurige selecties:

  • Beste manier om willekeurige rijen PostgreSQL te selecteren


  1. Hoe de huidige instellingen voor puntopdrachten in SQLite te tonen

  2. Android Realm Handling Primaire sleutel in relationeel object

  3. Dynamische spil in orakel sql

  4. Hoe het interval tussen twee datums in PostgreSQL te vinden