2013-10-02 8 views
32

मैं तालिका से 15,000 आईडी के 25 यादृच्छिक नमूने प्राप्त करने का प्रयास कर रहा हूं। हर बार मैन्युअल रूप से चलाने के बजाए, मैं एक लूप करने की कोशिश कर रहा हूं। जो मैं पूरी तरह समझता हूं वह पोस्टग्रेस का इष्टतम उपयोग नहीं है, लेकिन यह मेरे पास है।पोस्ट के लिए पोस्ट

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 एसक्यूएल भाषा का हिस्सा नहीं हैं और केवल एक प्रक्रियात्मक भाषा समारोह के शरीर या एक 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$; 

आप प्रदर्शन अनुकूलन करने के लिए की जरूरत है, इस पर विचार संबंधित सवाल