Prosedur elemen seperti loop bukan bagian dari bahasa SQL dan hanya dapat digunakan di dalam isi fungsi bahasa prosedural, prosedur (Postgres 11 atau yang lebih baru) atau DO
pernyataan, di mana elemen tambahan tersebut didefinisikan oleh bahasa prosedural masing-masing. Standarnya adalah PL/pgSQL, tetapi ada yang lain.
Contoh dengan 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$;
Untuk banyak tugas yang dapat diselesaikan dengan loop, ada berbasis set yang lebih pendek dan lebih cepat solusi di tikungan. Setara dengan SQL murni untuk contoh Anda:
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;
Tentang generate_series()
:
- Apa perilaku yang diharapkan untuk beberapa fungsi pengembalian-set dalam klausa SELECT?
Tentang mengoptimalkan kinerja pilihan acak:
- Cara terbaik untuk memilih baris acak PostgreSQL