PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

रेल 3 अद्वितीय बाधा अपवाद पोस्टग्रेज को अनदेखा करता है

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

stuff.each do |h|
  begin
    Model.create(h)
  rescue ActiveRecord::RecordNotUnique => e
    next if(e.message =~ /unique.*constraint.*INDEX_NAME_GOES_HERE/)
    raise
  end
end

रुचि के कुछ बिंदु:

  1. डेटाबेस के अंदर एक बाधा उल्लंघन आपको एक ActiveRecord::RecordNotUnique देगा अंतर्निहित PG::Error . के बजाय त्रुटि . AFAIK, आपको एक PG::Error मिलेगा यदि आप ActiveRecord के माध्यम से जाने के बजाय सीधे डेटाबेस से बात कर रहे थे।
  2. INDEX_NAME_GOES_HEREबदलें अद्वितीय अनुक्रमणिका के वास्तविक नाम के साथ।
  3. आप केवल उस विशिष्ट बाधा उल्लंघन को अनदेखा करना चाहते हैं जिसकी आप अपेक्षा कर रहे हैं, इसलिए next if(...) बिट के बाद तर्कहीन raise (अर्थात अपवाद को फिर से उठाएं यदि यह वह नहीं है जिसे आप देखने की उम्मीद कर रहे हैं)।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL सिस्टम कैटलॉग को समझना और पढ़ना

  2. एडब्ल्यूएस बीनस्टॉक या ईसी2 इंस्टेंस में जियोडजैंगो सपोर्ट के साथ Django की स्थापना

  3. pyodbc को Postgres . से कनेक्ट करें

  4. PostgreSQL के लिए pgModeler का अवलोकन

  5. PL/pgSQL के साथ PostgreSQL में रिकॉर्ड के रूप में एकाधिक फ़ील्ड लौटाएं