JSONB, belirli bir Postgresql anahtarının değerini değiştirir

0

Soru

Postgresql'deki bir jsonb nesnesinin içindeki belirli anahtarların değerlerini değiştirmem gerekiyor:

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;

Buradaki kod aşağıdaki sonucu verir:

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

"Metin1" in tüm oluşumlarını değiştirmek yerine, yalnızca "anahtar1" değerinin içindeki metni değiştirmek istiyorum: nasıl yaparım?

Güncellemenin sonucu şöyle bir şey olmalı:

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

İstenen sonucu güncelledi, yeterince açık değildi.

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

En iyi cevabı

1

Bu işlevi kullanınjsonb_build_object().

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

Db < >fiddle'da test edin.

2021-11-22 14:25:16

İşte bu, teşekkürler!
Stefano De Rosso
0

İki JSON verisiyle bağlantı kurmak ve yeni JSON verileri oluşturmak için || operatörünü kullanabilirsiniz. Artık eski JSON verilerini yeni JSON verilerine (Örn.: {"key2": "text2"})

Gösteri

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

PS:

Ayrıca, şunları kullanabilirsiniz jsonb_set verileri değiştirmek için işlev.

Gösteri

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

Mevcut metnin bozulmadan kalmasını istiyorum, bu yalnızca değer "metin1" ise ve "metin2" olarak değiştirmek istersem çalışır, ancak "aaaaaa metin1" varsa ve "aaaaaa metin2" olarak değiştirmek istersem çalışmaz. Dize bir bölümü yerine, bütün dizesini güncelleştirmek istiyorum.
Stefano De Rosso

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................