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

पोस्टग्रेज/JSON - सभी सरणी तत्वों को अपडेट करें

कुंजी द्वारा जेसन सरणी तत्वों को अपडेट करने के लिए कोई मानक फ़ंक्शन नहीं है। एक कस्टम फ़ंक्शन शायद समस्या को हल करने का सबसे आसान तरीका है:

create or replace function update_array_elements(arr jsonb, key text, value jsonb)
returns jsonb language sql as $$
    select jsonb_agg(jsonb_build_object(k, case when k <> key then v else value end))
    from jsonb_array_elements(arr) e(e), 
    lateral jsonb_each(e) p(k, v)
$$;

select update_array_elements('[{"bar":true},{"bar":true}]'::jsonb, 'bar', 'false');

      update_array_elements
----------------------------------
 [{"bar": false}, {"bar": false}]
(1 row)

आपकी क्वेरी कुछ इस तरह दिख सकती है:

with a_data(js) as (
values(
    '{
        "foo": [
          {
            "bar": true
          },
          {
            "bar": true
          }
        ]
    }'::jsonb)
)
select
    jsonb_set(js, '{foo}', update_array_elements(js->'foo', 'bar', 'false'))
    from a_data;

                 jsonb_set                 
-------------------------------------------
 {"foo": [{"bar": false}, {"bar": false}]}
(1 row)     


  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. Postgresql में एक अपरर्ट प्रदर्शन करते समय आंशिक सूचकांक का उपयोग संघर्ष खंड में नहीं किया जाता है

  3. Ubuntu 20.04 पर पोस्टग्रेज 13 के साथ शुरुआत करना

  4. कनेक्शन.सेलेक्ट_वैल्यू केवल पीजी रत्न के साथ पोस्टग्रेज में स्ट्रिंग्स लौटाता है

  5. PostgreSQL वापसी परिणाम JSON सरणी के रूप में सेट?