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

विशिष्ट jsonb सरणी मान को अद्यतन करने के लिए jsonb_set() का उपयोग करना

आप jsonb_array_elements() with ordinality का उपयोग करके किसी खोजे गए तत्व की अनुक्रमणिका पा सकते हैं (नोट, ordinality 1 से शुरू होता है जबकि जेसन सरणी की पहली अनुक्रमणिका 0 है):

select 
    pos- 1 as elem_index
from 
    samples, 
    jsonb_array_elements(sample->'result') with ordinality arr(elem, pos)
where
    id = 26 and
    elem->>'8410' = 'FERR_R';

 elem_index 
------------
          2
(1 row) 

तत्व को उसकी अनुक्रमणिका के आधार पर अद्यतन करने के लिए उपरोक्त क्वेरी का उपयोग करें (ध्यान दें कि jsonb_set() का दूसरा तर्क एक टेक्स्ट ऐरे है):

update 
    samples
set
    sample = 
        jsonb_set(
            sample,
            array['result', elem_index::text, 'ratingtext'],
            '"some individual text"'::jsonb,
            true)
from (
    select 
        pos- 1 as elem_index
    from 
        samples, 
        jsonb_array_elements(sample->'result') with ordinality arr(elem, pos)
    where
        id = 26 and
        elem->>'8410' = 'FERR_R'
    ) sub
where
    id = 26;    

परिणाम:

select id, jsonb_pretty(sample)
from samples;

 id |                   jsonb_pretty                   
----+--------------------------------------------------
 26 | {                                               +
    |     "result": [                                 +
    |         {                                       +
    |             "8410": "ABNDAT",                   +
    |             "8411": "Abnahmedatum"              +
    |         },                                      +
    |         {                                       +
    |             "8410": "ABNZIT",                   +
    |             "8411": "Abnahmezeit"               +
    |         },                                      +
    |         {                                       +
    |             "8410": "FERR_R",                   +
    |             "8411": "Ferritin",                 +
    |             "ratingtext": "Some individual text"+
    |         }                                       +
    |     ]                                           +
    | }
(1 row)

jsonb_set() में अंतिम तर्क true होना चाहिए एक नया मान जोड़ने के लिए बाध्य करने के लिए यदि इसकी कुंजी अभी तक मौजूद नहीं है। हालांकि इसे छोड़ा जा सकता है क्योंकि इसका डिफ़ॉल्ट मान true . है ।

हालांकि समवर्ती मुद्दों की संभावना नहीं है (प्रतिबंधित WHERE स्थिति और संभावित रूप से प्रभावित पंक्तियों की एक छोटी संख्या के कारण) आपको परमाणु अद्यतन में भी रुचि हो सकती है .. पोस्टग्रेज में चुनें।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL दिनांक और समय कार्य

  2. PostgreSQL सीरियल प्रकार के लिए हाइबरनेट एनोटेशन

  3. एकाधिक थ्रेड्स का उपयोग करके फ़ाइल लिखना

  4. उत्पादन PostgreSQL डेटाबेस को प्रबंधित करना आसान बनाना

  5. PostgreSQL:PostgreSQL में टेबल दिखाएं