Как добавить вложенный массив в столбец JSONB - PullRequest
1 голос
/ 11 апреля 2020

Принятые ответы в других местах ( Как получить sh объект JSON для вложенного массива в столбце JSONB ) не работают в моей ситуации.

Я хочу добавить строку во вложенный массив в ненулевой столбец JSONB. Если массив не существует, я хочу создать его (и добавить мою строку). Содержимое столбца до обновления будет объектом {} (ie, а не массивом).

Следующее только что приводит к тому, что нулевое значение в столбце "данные" нарушает не- нулевое ограничение ошибка ограничений:

update md_ticker
SET data = jsonb_set(data, '{labels}', data -> 'labels' || '"some string"', true)
where id = 74650534

1 Ответ

0 голосов
/ 11 апреля 2020

Используйте case, чтобы проверить, существует ли массив labels:

update md_ticker
set data = case 
    when data ? 'labels' then 
        jsonb_set(data, '{labels}', data -> 'labels' || '"some string"', true)
    else
        data || '{"labels": ["some string"]}'
    end
where id = 74650534
...