मैं विशेष रूप से आपकी सजा को संबोधित करने के लिए एक और विचार का प्रस्ताव करना चाहता हूं: "इसलिए मैं यह जांचना चाहता हूं कि क्या बैच से एक भी पंक्ति तालिका में मौजूद है क्योंकि तब मुझे पता है कि वे सभी सम्मिलित किए गए थे ।"
आप "बैचों" में सम्मिलित करके चीजों को कुशल बना रहे हैं, लेकिन फिर एक समय में एक रिकॉर्ड की जाँच कर रहे हैं? यह मुझे सहज लगता है। इसलिए जब आप कहते हैं " आवेषण हमेशा बैचों में किया जाता है " तो मैं इसे लेता हूं मतलब आप एक सम्मिलित विवरण के साथ कई रिकॉर्ड डाल रहे हैं । आपको यह महसूस करने की आवश्यकता है कि Postgres ACID अनुरूप है। यदि आप एक सम्मिलित विवरण के साथ कई रिकॉर्ड (डेटा का एक बैच) डाल रहे हैं , तो यह जांचने की आवश्यकता नहीं है कि कुछ डाला गया था या नहीं। बयान या तो पास हो जाएगा या यह विफल हो जाएगा। सभी रिकॉर्ड डाले जाएंगे या कोई नहीं।
दूसरी ओर, यदि आपका C # कोड केवल एक "सेट" अलग-अलग इन्सर्ट स्टेटमेंट्स कर रहा है, उदाहरण के लिए, एक लूप में, और आपके दिमाग में, यह "बैच" है .. तो आपको वास्तव में इसे "के रूप में वर्णित नहीं" करना चाहिए। आवेषण हमेशा बैचों में किया जाता है ”। यह तथ्य कि आप उम्मीद करते हैं कि आप जिसे "बैच" कहते हैं, वह हिस्सा वास्तव में डाला नहीं जा सकता है, और इसलिए चेक की आवश्यकता महसूस होती है, दृढ़ता से यह सुझाव देता है कि यह मामला है, जिस स्थिति में आपको अधिक मौलिक समस्या है। वास्तव में एक रिकॉर्ड के साथ कई रिकॉर्ड डालने के लिए आपको अपने प्रतिमान को बदलने की जरूरत है, और यदि व्यक्तिगत रिकॉर्ड ने इसे बनाया है, तो यह जाँच करेगा।
इस उदाहरण पर विचार करें:
CREATE TABLE temp_test (
id SERIAL PRIMARY KEY,
sometext TEXT,
userid INT,
somethingtomakeitfail INT unique
)
-- insert a batch of 3 rows
;;
INSERT INTO temp_test (sometext, userid, somethingtomakeitfail) VALUES
('foo', 1, 1),
('bar', 2, 2),
('baz', 3, 3)
;;
-- inspect the data of what we inserted
SELECT * FROM temp_test
;;
-- this entire statement will fail .. no need to check which one made it
INSERT INTO temp_test (sometext, userid, somethingtomakeitfail) VALUES
('foo', 2, 4),
('bar', 2, 5),
('baz', 3, 3) -- <<--(deliberately simulate a failure)
;;
-- check it ... everything is the same from the last successful insert ..
-- no need to check which records from the 2nd insert may have made it in
SELECT * FROM temp_test
यह वास्तव में किसी भी ACID आज्ञाकारी DB के लिए प्रतिमान है .. न कि केवल Postgresql के लिए। दूसरे शब्दों में, यदि आप अपनी "बैच" अवधारणा को ठीक कर लेते हैं और पहले स्थान पर पंक्ति जाँच द्वारा कोई भी पंक्ति करने से बचते हैं तो आप बेहतर हैं।