Postgres FOR LOOP

Sto cercando di ottenere 25 campioni casuali di 15.000 ID da un tavolo. Invece di premere manualmente la corsa ogni volta, sto provando a fare un ciclo. Che capisco perfettamente non è l’uso ottimale di Postgres, ma è lo strumento che ho. Questo è quello che ho finora:

for i in 1..25 LOOP insert into playtime.meta_random_sample select i, ID from tbl order by random() limit 15000 end loop 

Gli elementi procedurali come loops non fanno parte del linguaggio SQL e possono essere utilizzati solo all’interno del corpo di una funzione di linguaggio procedurale o di una dichiarazione DO , dove tali elementi aggiuntivi sono definiti dal rispettivo linguaggio procedurale. Il valore predefinito è PL / pgSQL , ma ce ne sono altri .

Esempio con 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$; 

Se hai bisogno di ottimizzare le prestazioni , considera questa domanda correlata:

  • Il modo migliore per selezionare le righe casuali di PostgreSQL