जवाबों:
मुझे लगता है कि .psqlrc को निम्नलिखित में जोड़ने का उपाय पूर्णता से दूर है
\set ON_ERROR_STOP on
वहाँ बहुत अधिक सरल और सुविधाजनक तरीका मौजूद है - पैरामीटर के साथ psql का उपयोग करें:
psql -v ON_ERROR_STOP=1
बेहतर भी उपयोग करने के लिए -Xपैरामीटर .psqlrc फ़ाइल उपयोग को बंद करना मेरे लिए पूरी तरह से काम करता है
पी एस Eisentraut से महान पोस्ट में पाया समाधान। धन्यवाद, पीटर! http://petereisentraut.blogspot.com/2010/03/running-sql-scripts-with-psql.html
मुझे लगता है कि आप उपयोग कर रहे हैं psql, यह आपकी ~/.psqlrcफ़ाइल में जोड़ना आसान हो सकता है ।
\set ON_ERROR_STOP on
यह पहली त्रुटि पर गर्भपात कर देगा। यदि आपके पास यह नहीं है, तो भी एक लेन-देन के साथ यह आपकी स्क्रिप्ट को क्रियान्वित करता रहेगा लेकिन आपकी स्क्रिप्ट के अंत तक सब कुछ विफल रहेगा।
और आप शायद एक लेनदेन का उपयोग करना चाहते हैं जैसा कि पॉल ने कहा। psql --single-transaction ...यदि आप स्क्रिप्ट को बदलना नहीं चाहते हैं, तो यह भी किया जा सकता है ।
तो एक पूर्ण उदाहरण, अपने .psqlrc में ON_ERROR_STOP के साथ:
psql --single-transaction --file /your/script.sql
--single-transactionप्रयोग किया जाता है, फिर -v ON_ERROR_STOP=1भी एक गैर शून्य अस्तित्व की स्थिति के लिए आवश्यक है
यह बिल्कुल वैसा नहीं है जैसा आप चाहते हैं, लेकिन यदि आप अपनी स्क्रिप्ट के साथ शुरू करते हैं begin transaction;और समाप्त होते हैं end transaction;, तो यह वास्तव में पहली त्रुटि के बाद सब कुछ छोड़ देगा, और फिर यह त्रुटि से पहले की गई हर चीज को रोलबैक कर देगा।
मैं हमेशा सीधे मैनुअल का संदर्भ लेना पसंद करता हूं।
से PostgreSQL मैनुअल :
स्थिति से बाहर निकलें
psql 0 को शेल में देता है यदि यह सामान्य रूप से समाप्त हो जाता है, 1 यदि इसकी स्वयं की एक घातक त्रुटि होती है (जैसे मेमोरी से बाहर, फ़ाइल नहीं मिली), 2 यदि सर्वर से कनेक्शन खराब हो गया था और सत्र इंटरैक्टिव नहीं था, और 3 यदि एक स्क्रिप्ट में एक त्रुटि हुई और ON_ERROR_STOP चर सेट किया गया था।
डिफ़ॉल्ट रूप से यदि आप PostgreSQL सर्वर त्रुटि psql पर चल रहे sql कोड में कोई त्रुटि नहीं छोड़ेंगे। यह त्रुटि को पकड़ेगा और जारी रखेगा। यदि, जैसा कि ऊपर बताया गया है, आप ON_ERROR_STOPसेटिंग को चालू करते हैं, जब psql sql कोड में कोई त्रुटि पकड़ता है तो यह बाहर निकल जाएगा और 3शेल पर वापस आ जाएगा ।
-v ON_ERROR_STOP=ONयह भी काम करता है, कम से कम 9.2 के साथ। मुझे संदेह है कि बूलियन "सच" के किसी भी संस्करण की अनुमति है।