मेरे पास tag
2 कॉलम के साथ एक तालिका है : id
(uuid) और name
(पाठ)। मैं अब तालिका में एक नया टैग सम्मिलित करना चाहता हूं, लेकिन यदि टैग पहले से मौजूद है, तो मैं केवल id
मौजूदा रिकॉर्ड प्राप्त करना चाहता हूं ।
मैंने मान लिया कि मैं इसके ON CONFLICT DO NOTHING
साथ संयोजन में उपयोग कर सकता हूं RETURNING "id"
:
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT DO NOTHING
RETURNING "id";
लेकिन यह एक खाली परिणाम सेट देता है, यदि "फू" नाम वाला टैग पहले से मौजूद है।
मैंने तब नॉच DO UPDATE
क्लॉज़ का उपयोग करने के लिए क्वेरी को बदल दिया :
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT ("name") DO UPDATE SET "name" = 'foo'
RETURNING "id";
यह इरादा के अनुसार काम करता है, लेकिन यह कुछ हद तक भ्रामक है, क्योंकि मैं सिर्फ पहले से मौजूद मूल्य के लिए नाम सेट कर रहा हूं।
क्या यह इस समस्या के बारे में जाने का तरीका है या क्या मुझे याद आ रहा है?
ERROR: missing FROM-clause entry for table "excluded"
उपयोग करते समय देता है DO NOTHING
।
returning excluded.id
?