PostgreSQL - обновление внутреннего json - PullRequest
1 голос
/ 10 марта 2020

У меня есть столбец jdata типа jsonb внутри таблицы 'JTABLE'. Пример jdata выглядит следующим образом:

{
 "id" : 12,
 "address" : {
     "houseName": {
        "name" : "Jackson",
         "lang" : "ENG"
     } 
  } 
}

Как я могу запросить обновить lang до anotherValue для этого?

Я пробовал это, и это не похоже на работу:

UPDATE JTABLE SET jdata -> 'address'->'houseName'-> 'lang' = '"DEU"' where jdata->>'id' = '12';

Это не работает! Любая помощь?

РЕДАКТИРОВАТЬ:

Это перезаписывает мое значение, и я получаю это, когда я запускаю:

{
 "id" : 12,
 "address" : {
     "houseName": {
         "lang" : "DEU"
     } 
  } 
}

Я потерял ключ name.

Я пытаюсь этот запрос сейчас:

SELECT jsonb_set(jdata, 'address,houseName}', '{"lang":"DEU"}'::jsonb) FROM JTABLE where jdata->>'id' = '12';

1 Ответ

0 голосов
/ 10 марта 2020

Ваш путь неверен, 2-й оператор должен быть путем к json key вам sh для обновления.

Запрос для просмотра вашего обновления должен выглядеть следующим образом:

SELECT jsonb_set(jdata, '{address,houseName,lang}', '"DEU"') FROM JTABLE where jdata->'id' = '12';

Последний запрос на обновление:

UPDATE JTABLE SET jdata = jsonb_set(jdata, '{address,houseName,lang}', '"DEU"') WHERE jdata->'id' = '12';

Также не вводите приведение record к `jsonb.

...