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

जहां क्लॉज का उपयोग करके PostgreSQL में jsonb कॉलम प्रकार में संग्रहीत JSON सरणी से किसी विशिष्ट JSON ऑब्जेक्ट को कैसे संशोधित या निकालें?

दोनों समस्याओं के लिए (संशोधित) JSON तत्वों को वापस करने और एकत्र करने की आवश्यकता होती है। दोनों समस्याओं के लिए मैं इसे उपयोग में आसान बनाने के लिए एक फ़ंक्शन बनाऊंगा।

create function remove_element(p_value jsonb, p_to_remove jsonb)
  returns jsonb
as
$$
  select jsonb_agg(t.element order by t.idx)  
  from jsonb_array_elements(p_value) with ordinality as t(element, idx)
  where not t.element @> p_to_remove;
$$
language sql
immutable;

फ़ंक्शन का उपयोग इस तरह किया जा सकता है, उदा। अद्यतन विवरण में:

update the_table
  set the_column = remove_element(the_column, '{"ModuleId": 1}')
where ...

दूसरी समस्या के लिए एक समान कार्य काम आता है।

create function change_value(p_value jsonb, p_what jsonb, p_new jsonb)
  returns jsonb
as
$$
  select jsonb_agg(
         case
           when t.element @> p_what then t.element||p_new
           else t.element
         end order by t.idx)  
  from jsonb_array_elements(p_value) with ordinality as t(element, idx);
$$
language sql
immutable;

|| ऑपरेटर एक मौजूदा कुंजी को अधिलेखित कर देगा, इसलिए यह पुराने नाम को प्रभावी रूप से नए नाम से बदल देता है।

आप इसे इस तरह इस्तेमाल कर सकते हैं:

update the_table
  set the_column = change_value(the_column, '{"ModuleId": 1}', '{"ModuleName": "CBA"}')
where ...;

मुझे लगता है कि JSON मानों को पास करना थोड़ा अधिक लचीला है, फिर कुंजियों को हार्डकोड करना जो फ़ंक्शन के उपयोग को बहुत सीमित कर देता है। पहले फ़ंक्शन का उपयोग एकाधिक कुंजियों की तुलना करके सरणी तत्वों को निकालने के लिए भी किया जा सकता है।

यदि आप फ़ंक्शन नहीं बनाना चाहते हैं, तो फ़ंक्शन कॉल को select . से बदलें कार्यों से।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं नोड-पीजी में तालिका नाम के रूप में एक चर का उपयोग कैसे कर सकता हूं?

  2. तालिका पंक्ति से सभी परिणामों को कैसे संयोजित करें?

  3. एक PostgreSQL क्वेरी कैसे करें जहां-इन क्लॉज जिसमें प्रोग्रामेटिक रूप से एकाधिक कॉलम होते हैं?

  4. PhpPgAdmin से sql इंसर्ट क्वेरी सिंटैक्स त्रुटि पोस्टग्रेज करता है

  5. एक अदिश से तत्व नहीं निकाल सकते