手順 ループなどの要素 SQL言語の一部ではなく、手続き型言語関数、プロシージャ(Postgres 11以降)、またはDO
の本体内でのみ使用できます。 ステートメント。このような追加要素は、それぞれの手続き言語によって定義されます。デフォルトはPL/pgSQLですが、他にもあります。
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$;
ループで解決できる多くのタスクには、より短く、より高速なセットベースがあります。 角を曲がったソリューション。あなたの例に相当する純粋なSQL:
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;
generate_series()
について :
- SELECT句で複数のセットを返す関数に期待される動作は何ですか?
ランダム選択のパフォーマンスの最適化について:
- ランダムな行をPostgreSQLで選択するための最良の方法