JSONB की जगह मूल्य के एक विशिष्ट कुंजी Postgresql

0

सवाल

मैं की जरूरत है को बदलने के लिए मूल्यों के विशिष्ट चाबियाँ में एक jsonb वस्तु में Postgresql:

create table content (
  id int,
  dynamic_fields jsonb
  );
  
insert into content values (0, '{
    "key1": "aaaaa text1",
    "key2": "text1",
    "key3": "blabla"}'::jsonb);

UPDATE content 
SET dynamic_fields = replace(dynamic_fields::text, 'text1', 'text2')::jsonb;

इस कोड यहाँ निम्न परिणाम देता है:

id |    dynamic_fields  
0  |  {"key1": "aaaaa text2", "key2": "text2", "key3": "blabla"}

के बजाय की जगह की सभी घटनाओं "text1", मैं करना चाहते हैं की जगह है कि केवल पाठ के अंदर के मूल्य "key1": मैं इसे कैसे करते हैं?

परिणाम के लिए अद्यतन किया जाना चाहिए कुछ की तरह:

id |    dynamic_fields  
0  |  {"key1": "aaaaa text1", "key2": "text2", "key3": "blabla"}

अद्यतन वांछित परिणाम है, यह काफी स्पष्ट नहीं था.

jsonb postgresql replace
2021-11-22 13:55:53
2

सबसे अच्छा जवाब

1

इस समारोह का उपयोग करें jsonb_build_object().

update content
set dynamic_fields = 
    dynamic_fields || 
    jsonb_build_object('key1', replace(dynamic_fields->>'key1', 'text1', 'text2'))
where dynamic_fields ? 'key1'

में यह परीक्षण Db<>बेला.

2021-11-22 14:25:16

यह है कि, धन्यवाद!
Stefano De Rosso
0

आप कर सकते हैं का उपयोग ऑपरेटर || संपर्क करने के लिए दो JSON डेटा और नई उत्पन्न JSON डेटा. अब हम का उपयोग कर सकते हैं || में शामिल होने के लिए पुराने JSON डेटा के लिए नई JSON डेटा (जैसे: {"key2": "text2"})

डेमो

update content
set dynamic_fields = dynamic_fields || '{"key2": "text2"}'::jsonb;

P. S:

इसके अलावा, आप उपयोग कर सकते हैं jsonb_set समारोह में डेटा को बदलने के लिए.

डेमो

update content
set dynamic_fields = jsonb_set(dynamic_fields, '{key2}', '"text2"');
2021-11-22 14:09:06

मैं चाहता हूँ मौजूदा पाठ के लिए बरकरार रहने, तो यह केवल काम करता है अगर मान है "text1" और मैं चाहता हूँ करने के लिए इसे बदलने के लिए "text2", लेकिन अगर मैं है "aaaaaa text1" और मैं चाहता हूँ करने के लिए इसे बदलने के लिए "aaaaaa text2" यह काम नहीं करता है । मैं करने के लिए की जरूरत के एक हिस्से की जगह स्ट्रिंग, नहीं अद्यतन करने के लिए पूरे स्ट्रिंग.
Stefano De Rosso

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में