2010-12-18 16 views
65

पर असफल होने का कोई तरीका है कि एसक्यूएल स्क्रिप्ट निष्पादित करते समय यह स्क्रिप्ट पर पहली त्रुटि का सामना करते समय बंद हो जाता है, यह आमतौर पर पिछली त्रुटियों के बावजूद जारी रहता है।पोस्टग्रेस एसक्यूएल स्क्रिप्ट त्रुटि

धन्यवाद

उत्तर

5

यह बिल्कुल आप क्या चाहते हैं नहीं है, लेकिन अगर आप begin transaction; साथ अपनी स्क्रिप्ट शुरू करने और end transaction; के साथ समाप्त, यह वास्तव में पहली त्रुटि के बाद सब कुछ को छोड़ देगा, और फिर इसे सब कुछ यह त्रुटि से पहले किया था रोलबैक होगा ।

+0

सच है, लेकिन, यह अभी भी सब कुछ पार्स करता है। और यदि आप केवल * दूसरा * लेनदेन करना चाहते हैं तो पहले सफल होने पर, यह काम नहीं करेगा। – Wildcard

12

मुझे लगता है कि आप psql का उपयोग कर रहे हैं, यह आपके ~/.psqlrc फ़ाइल में जोड़ने के लिए आसान हो सकता है।

\set ON_ERROR_STOP on 

इससे पहले त्रुटि पर इसे रोक दिया जाएगा। यदि आपके पास यह नहीं है, तो लेनदेन के साथ भी यह आपकी स्क्रिप्ट को निष्पादित करेगा लेकिन आपकी स्क्रिप्ट के अंत तक सबकुछ विफल हो जाएगा।

और शायद आप लेनदेन का उपयोग करना चाहते हैं क्योंकि पॉल ने कहा था। यदि आप स्क्रिप्ट को बदलना नहीं चाहते हैं तो psql --single-transaction ... के साथ भी किया जा सकता है।

तो पूर्ण उदाहरण के लिए, अपने .psqlrc में ON_ERROR_STOP साथ:

psql --single-transaction --file /your/script.sql 
+2

भले ही लेनदेन विफल हो जाए, भले ही psql कमांड की निकास स्थिति अभी भी 0. –

+3

है, भले ही '- सिंगल-ट्रांज़ेक्शन 'का उपयोग किया गया हो,' -v ON_ERROR_STOP = 1' अभी भी एक शून्य शून्य स्थिति के लिए आवश्यक है – bitek

104

मैं समाधान .psqlrc के लिए निम्न जोड़ने के लिए लगता है कि पूर्णता से दूर है

\set ON_ERROR_STOP on 

वहाँ बहुत अधिक सरल और मौजूद है सुविधाजनक तरीका - पैरामीटर के साथ psql का उपयोग करें:

psql -v ON_ERROR_STOP=1 

का उपयोग करने के लिए बेहतरपैरामीटर .psqlrc फ़ाइल उपयोग बंद कर रहा है। मेरे लिए पूरी तरह से काम करता है

पेज। पीटर Eisentraut से महान पद में पाया समाधान। धन्यवाद, पीटर! http://petereisentraut.blogspot.com/2010/03/running-sql-scripts-with-psql.html

+4

'-v ON_ERROR_STOP = ON' कम से कम 9.2 के साथ भी काम करता है। मुझे संदेह है कि [बूलियन "सत्य"] के किसी भी प्रकार (http://www.postgresql.org/docs/9.2/static/datatype-boolean.html) की अनुमति है। – jpmc26

+0

यह इंटरैक्टिव मोड में काम नहीं करता है, जिसने मुझे एक मिनट के लिए भ्रमित कर दिया। –

+0

धन्यवाद, जोड़ -v ON_ERROR_STOP = 1 -x मेरे लिए काम करता है। – netto

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