2009-08-25 12 views
7

मैं एक 500,000 लाइन एसक्यूएल स्क्रिप्ट है:देरी या रुको-के लिए वक्तव्य

update users set region_id = 9814746 where id = 101 and region_id is null; 
update users set region_id = 9814731 where id = 102 and region_id is null; 
update users set region_id = 3470676 where id = 103 and region_id is null; 

मैं 10 सेकंड हर 50 लाइनों की देरी सम्मिलित करना चाहते हैं। क्या pgsql में टी-एसक्यूएल की तरह प्रतीक्षा करने वाला कथन है।

धन्यवाद।

उत्तर

17

pgsql T-SQL की तरह एक waitfor बयान है।

हाँ, pg_sleep:

pg=> SELECT pg_sleep(10); 
pg_sleep 
---------- 

(1 row) 
0

मेरे ज्ञान के लिए नहीं।

आप खोल में कुछ कर सकते हैं, अपने एसक्यूएल को एक साधारण स्क्रिप्ट के माध्यम से और फिर PostgreSQL में पाइप कर सकते हैं। जैसे पर्ल के साथ:

cat regionupdates.sql | perl -e '$i = 1; while(<STDIN>) { $i++; print $_; if ($i % 50 == 0) { sleep 10; } }' | psql -d MYDB -L output.txt 

बीटीडब्ल्यू: मुझे लगता है कि आपने पहले एक बहुत ही समान सवाल पूछा था। यह अच्छा होगा अगर आप जवाब आप अपनी समस्या हल हो पाया स्वीकार कर सकते हैं:

Begin...commit every 50 rows

+0

मैं के रूप में बिल्ली शामिल एसक्यूएल का स्रोत काफी आसानी से फ़ाइल नहीं हो सकता है, लेकिन किसी अन्य प्रोग्राम या शैल स्क्रिप्ट द्वारा उत्पन्न किया जा सकता है, इसलिए कमांड की संरचना आसानी से बदला जा सकता है। लेकिन मैं सामान्य रूप से अपना मुद्दा लेता हूं। –

+0

हम्म, सुनिश्चित नहीं है कि आपको डाउनवोट क्यों मिला - बिल्ली के स्टाइलिस्ट उपयोगों को अलग-अलग करें। ;-) यदि मैंने हर बार जब मैं चाहता था कि व्यवहार प्राप्त करने के लिए मैंने प्रतिलिपि/awk/you-name के माध्यम से SQL कथन फ़िल्टर किया है, तो मैं जॉन स्कीट होगा। +1 – pilcrow

1

आप PERFORM बयान के साथ pg_sleep समारोह के बाद से हम लौट रहे मूल्यों के बारे में परवाह नहीं है कह सकते हैं:

PERFORM pg_sleep(10); 
+1

धन्यवाद। यह मेरे लिए काम है। –

+0

मेरे लिए वाक्यविन्यास त्रुटि – dannymo

संबंधित मुद्दे