2012-06-21 13 views
23

मेरे पास एक यूआरएल तालिका है। वे शामिलपोस्टग्रेस्क्ल, अगर कुछ अद्वितीय मान के साथ पंक्ति मौजूद है, तो

(आईडी int प्राथमिक कुंजी, यूआरएल चरित्र अलग अद्वितीय, सामग्री चरित्र अलग, अंतिम तिथि का विश्लेषण किया)।

मैं ट्रिगर या कुछ बनाना चाहता हूं (नियम हो सकता है), इसलिए हर बार जब मैं अपने जावा प्रोग्राम से सम्मिलित करता हूं, तो इस तरह के यूआरएल के साथ पंक्ति मौजूद होने पर यह कुछ पंक्तियों को अपडेट करता है। अन्यथा इसे एक सम्मिलन करना चाहिए।

कृपया, क्या आप पोस्टग्रेस्क्ल में एक पूरा कोड प्रदान कर सकते हैं। धन्यवाद।

+1

के संभावित डुप्लिकेट [! PostgreSQL सम्मिलित करता है, तो विशेष पंक्ति नाम मौजूद नहीं करना] (http://stackoverflow.com/questions/5297045/postgresql- डालने-अगर-विशिष्ट-पंक्ति-नाम-मौजूद नहीं है) –

+0

ये दोनों बकवास प्रश्न हैं। –

उत्तर

45

यह कई बार पूछा गया है। एक संभावित समाधान यहां पाया जा सकता है: https://stackoverflow.com/a/6527838/552671

इस समाधान के लिए UPDATE और INSERT दोनों की आवश्यकता है।

UPDATE table SET field='C', field2='Z' WHERE id=3; 
INSERT INTO table (id, field, field2) 
     SELECT 3, 'C', 'Z' 
     WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3); 
Postgres 9.1 के साथ

यह एक क्वेरी के साथ यह करने के लिए संभव है: https://stackoverflow.com/a/8702291/552671

2

तो INSERTS दुर्लभ हैं, मैं के बाद से यह सभी अद्यतन पर एक SELECT का उत्सर्जन करता है एक NOT EXISTS (...) कर से बचने जाएगा। https://dba.stackexchange.com/questions/5815/how-can-i-insert-if-key-not-exist-with-postgresql

CREATE OR REPLACE FUNCTION upsert_tableName(arg1 type, arg2 type) RETURNS VOID AS $$ 
    DECLARE 
    BEGIN 
     UPDATE tableName SET col1 = value WHERE colX = arg1 and colY = arg2; 
     IF NOT FOUND THEN 
     INSERT INTO tableName values (value, arg1, arg2); 
     END IF; 
    END; 
    $$ LANGUAGE 'plpgsql'; 

इस तरह Postgres शुरू में एक UPDATE करने की कोशिश करेंगे: इसके बजाय, wildpeaks जवाब पर एक नज़र डालें। यदि कोई पंक्ति प्रभावित नहीं हुई है, तो यह INSERT उत्सर्जित करने के लिए वापस आ जाएगी।

1

मैं इस परिदृश्य में this post अधिक प्रासंगिक पाया:

WITH upsert AS (
    UPDATE spider_count SET tally=tally+1 
    WHERE date='today' AND spider='Googlebot' 
    RETURNING * 
) 
INSERT INTO spider_count (spider, tally) 
SELECT 'Googlebot', 1 
WHERE NOT EXISTS (SELECT * FROM upsert) 
संबंधित मुद्दे