मैं पोस्टग्रेज़ 8.4 डेटाबेस (सी # कोड से) अपडेट कर रहा हूं और मूल कार्य काफी सरल है: या तो मौजूदा पंक्ति को अपडेट करें या किसी एक को INSERT करें यदि कोई ' टी अभी तक मौजूद नहीं है। आम तौर पर मैं यह कर जाएगा:पोस्टग्रेर्स यूपीएसईआरटी (INSERT या UPDATE) केवल तभी मूल्य है जब 0 अलग-अलग
UPDATE my_table
SET value1 = :newvalue1, ..., updated_time = now(), updated_username = 'evgeny'
WHERE criteria1 = :criteria1 AND criteria2 = :criteria2
और 0 पंक्तियों तो एक सम्मिलित कर प्रभावित हुए हैं:,
INSERT INTO my_table(criteria1, criteria2, value1, ...)
VALUES (:criteria1, :criteria2, :newvalue1, ...)
एक मामूली मोड़ नहीं है, हालांकि। मैं अपडेटेड_टाइम और अपडेटेड_सनेम स्तंभों को तब तक बदलना नहीं चाहता जब तक कि कोई भी नया मान मौजूदा मानों से वास्तव में अलग न हो, ताकि डेटा अपडेट होने के बारे में भ्रामक उपयोगकर्ताओं से बच सकें।
अगर मैं केवल एक अद्यतन कर रहा था तो मैं मूल्यों के लिए कहां स्थितियों को जोड़ सकता था, लेकिन यह यहां काम नहीं करेगा, क्योंकि अगर डीबी पहले से ही अद्यतित है तो अद्यतन 0 पंक्तियों को प्रभावित करेगा और फिर मैं INSERT करने का प्रयास करें।
कोई भी इसे चुनने के अलावा, या तो अद्यतन या INSERT के अलावा ऐसा करने का एक शानदार तरीका सोच सकता है?
डुप्लिकेट अपडेट (पोस्टग्रेस्क्ल) पर सम्मिलित करें, डालें (http://stackoverflow.com/questions/1109061/insert-on-duplicate-update-postgresql) –
नहीं, डुप्लिकेट नहीं। वहां जवाब जो मूल रूप से ऊपर लिखा है, उस कार्य में बस encapsulates। – EMP