대화는 두서없이 교체 가치의 특정 키 Postgresql

0

질문

나는 교체할 필요가 값의 특정 키를 내부에 대화는 두서없이 개체에 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 data. 이제 우리가 사용할 수 있 || 하여 가입하세 old 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

내가 원하는 기존 텍스트를 그대로 유지므로 이 값은"텍스트 1"내가 그것을 변경하고 싶은"text2",그러나이 있는 경우"aaaaaa text1"내가 그것을 변경하고 싶을"aaaaaa text2"그것은 작동하지 않습니다. 내가 필요로 대체하는 문자열의 일부,업데이트하지 않도록 전체 문자열입니다.
Stefano De Rosso

다른 언어로

이 페이지는 다른 언어로되어 있습니다

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