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

क्या INSERT [...] संघर्ष पर विदेशी कुंजी उल्लंघनों के लिए उपयोग किया जा सकता है?

हां, अपनी इनपुट पंक्तियों को संदर्भित तालिका में शामिल करें, इस प्रकार FK कॉलम पर बिना मिलान वाली पंक्तियों को हटा दें:

INSERT INTO entries(entry_id, referenced_id, name)
SELECT val.entry_id, val.referenced_id, val.name
FROM  (
  VALUES (1, 2, 'references two')
         -- more?
  ) val (entry_id, referenced_id, name)
JOIN   referenced USING (referenced_id)  -- drop rows without matching FK
ON     CONFLICT (entry_id) DO NOTHING;   -- drop rows with duplicate id

UPSERT ही (INSERT ... ON CONFLICT DO NOTHING ) केवल अद्वितीय उल्लंघनों पर प्रतिक्रिया करता है। मैनुअल:

<ब्लॉककोट>

ON CONFLICT एक अद्वितीय बाधा या बहिष्करण बाधा उल्लंघन त्रुटि को बढ़ाने के लिए वैकल्पिक कार्रवाई निर्दिष्ट करने के लिए उपयोग किया जा सकता है। (नीचे संघर्ष खंड देखें।)

चूंकि VALUES एक्सप्रेशन अब INSERT . से अटैच नहीं है सीधे, स्तंभ प्रकार लक्ष्य तालिका से प्राप्त नहीं होते हैं। आपको कास्ट . करने की आवश्यकता हो सकती है गैर-बुनियादी प्रकारों के साथ संचालन करते समय स्पष्ट रूप से इनपुट मान। देखें:

  • एकाधिक पंक्तियों को अपडेट करते समय NULL प्रकार कास्ट करना



  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 v13 क्लस्टरकंट्रोल के साथ परिनियोजन और स्केलिंग 1.8.2

  2. Django prefetch_संबंधित सीमा के साथ

  3. डेटाडम्प लोड करते समय Django प्रोजेक्ट को sqlite3 बैकएंड से postgresql में स्विच करना विफल हो जाता है

  4. PostgreSQL में डेटाबेस में टेक्स्ट डेटा लोड करने का कोई तरीका है?

  5. PostgreSQL में HTML टैग्स को अलग करना