2013-10-02 20 views
32

Ich versuche 25 zufällige Proben von 15.000 IDs aus einer Tabelle zu bekommen. Anstatt jedes Mal manuell zu drücken, versuche ich eine Schleife zu machen. Was ich vollständig verstehe, ist nicht der optimale Einsatz von Postgres, aber es ist das Werkzeug, das ich habe. Das ist, was ich habe, so weit: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 

Antwort

76

Procedural elements like loops sind nicht Teil der SQL-Sprache und kann nur im Inneren des Körpers eines prozeduralen Sprachfunktion oder eine DO Aussage, wenn sich diese zusätzlichen Elemente definiert werden die jeweilige Verfahrenssprache. Der Standardwert ist PL/pgSQL, aber there are others.

Beispiel mit 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$; 

Wenn Sie Leistung, sollten Sie diese Frage im Zusammenhang optimieren müssen: