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

मैं PostgreSQL JSONB डेटाटाइप के अंदर एकल संपत्ति मान को कैसे संशोधित करूं?

jsonb_set() का तीसरा तर्क jsonb . का होना चाहिए प्रकार। समस्या एक पाठ स्ट्रिंग को jsonb स्ट्रिंग में कास्ट करने में है, आपको दोहरे उद्धरण चिह्नों में एक स्ट्रिंग की आवश्यकता है। आप concat() . का उपयोग कर सकते हैं या format() :

update animal
set info = 
    jsonb_set(info, '{location}', concat('"', lower(info->>'location'), '"')::jsonb, true) 
--  jsonb_set(info, '{location}', format('"%s"', lower(info->>'location'))::jsonb, true) 
where id='49493'
returning *;

  id   |                               info                               
-------+------------------------------------------------------------------
 49493 | {"habit1": "fly", "habit2": "dive", "location": "sonoma narite"}
(1 row)

पोस्टग्रेज 9.4 . में आपको jsonb_each_text() का उपयोग करके json कॉलम को अननेस्ट करना चाहिए, फ्लाई पर उचित मान को संशोधित करने वाली कुल कुंजी और मान, और अंत में एक जेसन ऑब्जेक्ट बनाना चाहिए:

update animal a
set info = u.info
from (
    select id, json_object(
        array_agg(key), 
        array_agg(
            case key when 'location' then lower(value)
            else value end))::jsonb as info
    from animal,
    lateral jsonb_each_text(info) 
    group by 1
    ) u
where u.id = a.id
and a.id = 49493;

यदि आप फ़ंक्शन बना सकते हैं तो यह समाधान अधिक सुखद हो सकता है:

create or replace function update_info(info jsonb)
returns jsonb language sql as $$
    select json_object(
        array_agg(key), 
        array_agg(
            case key when 'location' then lower(value)
            else value end))::jsonb
    from jsonb_each_text(info)
$$

update animal
set info = update_info(info)
where id = 49493;


  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. PostgreSQL में समूह भूमिका के लिए डीबी में एक विशिष्ट स्कीमा पर सभी को अनुदान दें

  5. फेडोरा 33 . पर PostgreSQL 12 कैसे स्थापित करें