Изменить поле внутри Jsonb в Postgres - PullRequest
1 голос
/ 04 марта 2020

Я просматривал документацию Postgres Jsonb, но не смог найти решение для небольшой проблемы, с которой я столкнулся.

У меня есть таблица: MY_TABLE

, которая имеет следующие столбцы:

Пользователь, Имя, Данные и Закупленные

Следует отметить, что «Данные» является jsonb и имеет несколько полей. Одним из полей внутри «данных» является «Атрибут», но в настоящее время это строка. Как я могу go изменить это список строк?

Я пытался использовать json_build_array, но мне не повезло

Так, например, я бы хотел, чтобы мой jsonb выглядел например:

   {
       "Id": 1,
       "Attributes": ["Test"]

   }

вместо

{
    "Id": 1,
    "Attributes": "Test"

}

Меня интересует только поле "Атрибуты" внутри Json, а не любые другие поля.

1 Ответ

1 голос
/ 04 марта 2020

Это можно сделать с помощью jsonb_set() и jsonb_build_array(), например:

jsonb_set(js, '{Attributes}', jsonb_build_array(js->> 'Attributes'))

Демонстрация на DB Fiddle :

with t as (select '{ "Dd":1, "Attributes":"Test"}'::jsonb js)
select 
    js, 
    jsonb_set(js, '{Attributes}', jsonb_build_array(js->> 'Attributes')) new_js
from t
js                              | new_js                           
:------------------------------ | :--------------------------------
{"Dd": 1, "Attributes": "Test"} | {"Dd": 1, "Attributes": ["Test"]}
...