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

PG::ForeignKeyViolation:ERROR:टेबल xxx पर अपडेट या डिलीट करना विदेशी कुंजी बाधा का उल्लंघन करता है

ठीक मैनुअल से :

तो :delete_all विदेशी कुंजी का ख्याल रखता है, लेकिन चूंकि कोई कॉलबैक नहीं लगाया जाता है, यह केवल एक स्तर गहरा होता है। तो यह Company . में :

has_many :projects, dependent: :delete_all

इसका मतलब है कि कॉल करना #destroy किसी कंपनी पर सीधे संबद्ध projects को हटा देगा डेटाबेस से। लेकिन वह यह नहीं देखेगा:

has_many :tasks, dependent: :delete_all

जो आपके पास projects . में है और अंत में आप उन परियोजनाओं को हटाने का प्रयास करते हैं जो अभी भी tasks . में संदर्भित हैं जैसा कि त्रुटि संदेश इंगित करता है।

आप अपने सभी संघों को dependent: :destroy . पर स्विच कर सकते हैं , यह उन्हें नष्ट करने से पहले डेटाबेस से सब कुछ खींच लेगा और कॉलबैक कहा जाएगा (जो डेटाबेस से अधिक चीजों को केवल उन्हें नष्ट करने के लिए लोड करेगा जो डेटाबेस से अधिक चीजें लोड करेगा ...) अंतिम परिणाम बहुत सारी डेटाबेस गतिविधि होगी लेकिन सभी विदेशी कुंजियों का ठीक से पालन किया जाएगा।

वैकल्पिक रूप से, आप तर्क को डेटाबेस के अंदर रख सकते हैं जहां यह आमतौर पर on delete cascade विदेशी कुंजी बाधाओं पर :

आपका add_foreign_key कॉल इस तरह दिखाई देंगे:

add_foreign_key "projects", "companies", on_delete: :cascade
add_foreign_key "tasks", "projects", on_delete: :cascade
add_foreign_key "task_times", "tasks", on_delete: :cascade

इस मामले में। आप शायद dependent: :delete_all . को छोड़ना चाहेंगे आपके मॉडल में क्या हो रहा है, इसके बारे में एक अनुस्मारक के रूप में, या आप स्वयं एक टिप्पणी छोड़ सकते हैं।



  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. PostgreSQL में क्वेरी त्रुटि से कोई परिणाम नहीं लौटा

  3. jOOQ EXTRACT ([फ़ील्ड] से युग) समाधान?

  4. पीजी ::त्रुटि - हेरोकू पर संख्यात्मक क्षेत्र अतिप्रवाह

  5. Php . में एकाधिक तालिकाओं के लिए क्वेरी लिखना