यदि आप Postgresql 9.5 में अपग्रेड करने में सक्षम हैं, तो jsonb_set
कमांड उपलब्ध है, जैसा कि अन्य ने उल्लेख किया है।
निम्न में से प्रत्येक SQL कथन में, मैंने where
. छोड़ा है संक्षिप्तता के लिए खंड; जाहिर है, आप उसे वापस जोड़ना चाहेंगे।
नाम अपडेट करें:
UPDATE test SET data = jsonb_set(data, '{name}', '"my-other-name"');
टैग बदलें (टैग जोड़ने या हटाने के विरोध में):
UPDATE test SET data = jsonb_set(data, '{tags}', '["tag3", "tag4"]');
दूसरा टैग बदलना (0-अनुक्रमित):
UPDATE test SET data = jsonb_set(data, '{tags,1}', '"tag5"');
एक टैग संलग्न करें (<स्ट्राइक>यह तब तक काम करेगा जब तक कि 999 से कम टैग हैं; तर्क 999 को 1000 या उससे ऊपर बदलने से त्रुटि उत्पन्न होती हैस्ट्राइक> . पोस्टग्रेज 9.5.3 में अब ऐसा प्रतीत नहीं होता है; एक बहुत बड़ी अनुक्रमणिका का उपयोग किया जा सकता है):
UPDATE test SET data = jsonb_set(data, '{tags,999999999}', '"tag6"', true);
अंतिम टैग हटाएं:
UPDATE test SET data = data #- '{tags,-1}'
जटिल अद्यतन (अंतिम टैग हटाएं, एक नया टैग डालें, और नाम बदलें):
UPDATE test SET data = jsonb_set(
jsonb_set(data #- '{tags,-1}', '{tags,999999999}', '"tag3"', true),
'{name}', '"my-other-name"');
यह ध्यान रखना महत्वपूर्ण है कि इनमें से प्रत्येक उदाहरण में, आप वास्तव में JSON डेटा के किसी एक फ़ील्ड को अपडेट नहीं कर रहे हैं। इसके बजाय, आप डेटा का एक अस्थायी, संशोधित संस्करण बना रहे हैं, और उस संशोधित संस्करण को वापस कॉलम में असाइन कर रहे हैं। व्यवहार में, परिणाम समान होना चाहिए, लेकिन इसे ध्यान में रखते हुए जटिल अद्यतन करना चाहिए, जैसे कि अंतिम उदाहरण, अधिक समझने योग्य।
जटिल उदाहरण में, तीन रूपांतरण और तीन अस्थायी संस्करण हैं:पहला, अंतिम टैग हटा दिया गया है। फिर, उस संस्करण को एक नया टैग जोड़कर रूपांतरित किया जाता है। इसके बाद, दूसरा संस्करण name
. को बदलकर रूपांतरित किया जाता है खेत। data
में मान कॉलम को अंतिम संस्करण से बदल दिया गया है।