2013-10-02 20 views
32

私はテーブルから15,000 IDの25のランダムサンプルを取得しようとしています。手動で毎回実行を押すのではなく、私はループを実行しようとしています。私が完全に理解しているのは、Postgresの最適な使用ではありませんが、私が持っているツールです。これは私がこれまで持っているものです。Postgres for LOOP

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

答えて

76

Procedural elements like loopsは、SQL言語の一部ではなく、唯一のそのような追加要素がで定義されている手続き言語機能やDO文の本体、内部で使用することができますそれぞれの手続き言語。デフォルトはPL/pgSQLですが、there are othersです。 plpgsqlが持つ

例:

DO 
$do$ 
BEGIN 
FOR i IN 1..25 LOOP 
    INSERT INTO playtime.meta_random_sample (col_i, col_id) -- use col names 
    SELECT i, id 
    FROM tbl 
    ORDER BY random() 
    LIMIT 15000; 
END LOOP; 
END 
$do$; 

あなたはパフォーマンスを最適化する必要がある場合は、この関連の質問を考えます