2013-10-02 32 views
32

Tablodan 25 adet rastgele 15.000 ID örnek alıyorum. Her seferinde manuel olarak basmak yerine, bir döngü yapmaya çalışıyorum. Tam olarak anladığım, Postgres'in optimum kullanımı değil, ama sahip olduğum araç.LOOP İÇİN TIKLAYINIZ

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

cevap

76

Procedural elements like loops SQL dilinin bir parçası değildir ve sadece bu tür ek elemanlar tarafından tanımlanan usul dil fonksiyonunun vücudun veya bir DO açıklamada, içeride kullanılabilir: Bu defa ne var ilgili prosedür dili. Varsayılan PL/pgSQL, ancak there are others'dur. plpgsql ile

Örnek:

:

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

Eğer performansı optimize etmek gerekiyorsa, bu ilgili soruyu düşünün