স্ক্রিপ্ট স্ক্রিপ্টটি কার্যকর করার সময় স্ক্রিপ্টে প্রথম ত্রুটির মুখোমুখি হওয়ার সময় এটি বন্ধ হয়ে যায় তা নির্দিষ্ট করার কোনও উপায় আছে কি না, এটি পূর্ববর্তী ত্রুটিগুলি নির্বিশেষে সাধারণত চালিয়ে যায়।
উত্তর:
আমি মনে করি .psqlrc এ অনুসরণ করার সমাধানটি নিখুঁততা থেকে অনেক দূরে
\set ON_ERROR_STOP on
আরও অনেক সহজ এবং সুবিধাজনক উপায় রয়েছে - প্যারামিটার সহ পিএসকিএল ব্যবহার করুন:
psql -v ON_ERROR_STOP=1
-X.psqlrc ফাইলের ব্যবহার বন্ধ করে প্যারামিটার ব্যবহার করা আরও ভাল । আমার জন্য পুরোপুরি কাজ করে
পিএস সমাধানটি পিটার আইজেনট্রাট থেকে দুর্দান্ত পোস্টে পাওয়া গেছে। আপনাকে ধন্যবাদ, পিটার! http://petereisentraut.blogspot.com/2010/03/running-sql-scriptts-with-psql.html
আমি ধরে নিচ্ছি আপনি ব্যবহার করছেন psql, এটি আপনার ~/.psqlrcফাইলে যুক্ত হতে পারে ।
\set ON_ERROR_STOP on
এটি প্রথম ত্রুটিতে এটি বাতিল করতে সক্ষম করে। আপনার যদি এটি না থাকে, এমনকি কোনও লেনদেনের সাহায্যে এটি আপনার স্ক্রিপ্টটি কার্যকর করতে থাকবে তবে আপনার স্ক্রিপ্টের শেষ না হওয়া পর্যন্ত সবকিছুতে ব্যর্থ।
এবং আপনি সম্ভবত পল যেমন বলেছিলেন তেমন কোনও লেনদেন ব্যবহার করতে চান। যা দিয়েও করা যায়psql --single-transaction ...আপনি স্ক্রিপ্ট পরিবর্তন করতে না চাইলে ।
আপনার .psqlrc এ ওপেন_আরআরআরপিওপি সহ একটি সম্পূর্ণ উদাহরণ:
psql --single-transaction --file /your/script.sql
--single-transactionব্যবহার করা -v ON_ERROR_STOP=1হয় তবে শূন্যের অস্তিত্বের স্থিতির জন্য এখনও প্রয়োজনীয়
এটি আপনি যা চান ঠিক তা নয়, তবে আপনি যদি আপনার স্ক্রিপ্টটি শুরু করে begin transaction;এবং শেষ করেন end transaction;, এটি আসলে প্রথম ত্রুটির পরে সমস্ত কিছু এড়িয়ে যাবে এবং তারপরে এটি ত্রুটির আগে যা কিছু করেছিল তা রোলব্যাক করবে।
আমি সর্বদা সরাসরি ম্যানুয়ালটি উল্লেখ করতে চাই।
থেকে পোস্টগ্রি ম্যানুয়াল :
প্রস্থান স্থিতি
পিএসকিএল 0 টি শেলটি স্বাভাবিকভাবে শেষ হলে 0 টি ফিরে আসে, 1 যদি নিজের একটি মারাত্মক ত্রুটি ঘটে তবে (উদাহরণস্বরূপ মেমরির বাইরে, ফাইলটি পাওয়া যায়নি), 2 যদি সার্ভারের সংযোগ খারাপ হয়ে যায় এবং সেশনটি ইন্টারেক্টিভ না হয় এবং 3 একটি স্ক্রিপ্টে একটি ত্রুটি ঘটেছে এবং চলক ON_ERROR_STOP সেট করা হয়েছিল _ST
ডিফল্টরূপে যদি আপনি পোস্টগ্রিএসকিউএল সার্ভারের ত্রুটিটি চালাচ্ছেন এমন এসকিএল কোডটি ত্রুটি ত্যাগ করবে না। এটি ত্রুটিটি ধরবে এবং চালিয়ে যাবে। উপরে বর্ণিত হিসাবে যদি আপনি ON_ERROR_STOPসেটিংসটি সেট করেন তবে পিএসএইচএল এসকিএল কোডটিতে একটি ত্রুটি পেলে এটি প্রস্থান 3করে শেলের কাছে ফিরে আসবে।
-v ON_ERROR_STOP=ONকমপক্ষে 9.2 দিয়েও কাজ করে। আমি সন্দেহ করি যে বুলিয়ান "ট্রু" এর কোনও রূপের অনুমতি রয়েছে।