Как обновить все значения столбца jsonb на одно и то же без указания ключей в postgresql? - PullRequest
0 голосов
/ 17 сентября 2018

Существует следующее значение:

{"111": false, "222": false, "333": false}

Как обновить его до следующего без указания ключей?

{"111": true, "222": true, "333": true}

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Сначала вы можете разложить JSON с помощью json_each(), дав вам одну пару ключ и значение на строку.Используйте CASE для замены false на true.Затем создайте JSON с использованием конкатенации строк и string_agg() и приведите его обратно к json.

UPDATE json
       SET json = (SELECT ('{'
                           || string_agg('"'
                                         || key
                                         || '": '
                                         || CASE
                                              WHEN value::text = 'false' THEN
                                                'true'
                                              ELSE
                                                value::text
                                            END,
                                            ', ')
                                         || '}')::json
                          FROM json_each(json));

db <> fiddle

Или используйте jsonb варианты, если тип на самом деле jsonb, а не json.

0 голосов
/ 17 сентября 2018

Просто используйте REPLACE в строках:

REPLACE(source, 'false', 'true')::jsonb; 

, где source - ваш jsonb столбец.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...