हां, अपनी इनपुट पंक्तियों को संदर्भित तालिका में शामिल करें, इस प्रकार 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 प्रकार कास्ट करना