PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Postgres 9.4 . में JSONB प्रकार के कॉलम पर अद्यतन संचालन कैसे करें

यदि आप 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 में मान कॉलम को अंतिम संस्करण से बदल दिया गया है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं SQLAlchemy में UUIDs का उपयोग कैसे कर सकता हूं?

  2. कैसे LocalTime () PostgreSQL में काम करता है

  3. डीबी अनुप्रयोगों के लिए ऑडिट ट्रेल/परिवर्तन इतिहास छोड़ने के लिए प्रभावी रणनीति?

  4. हेरोकू और रेल:पोस्टग्रेज के साथ जेम लोड त्रुटि, हालांकि यह GEMFILE में निर्दिष्ट है

  5. सर्वर पर डीबी कनेक्शन कैसे प्रबंधित करें?