PostgreQL обновляет данные из поля Json с типом многомерного массива - PullRequest
0 голосов
/ 29 октября 2018

Я нашел запрос, который обновляет данные из таблицы столбцов типа json.

Мой стол выглядит так:

ID |    Details

-------------------------------------------------------------------------------------------

1  | {"_translated": {"en_US": {"is_reviewed": "false"}, "default_locale": "en"}}

2  | {"_translated": {"en_US": {"is_reviewed": "false"}, "default_locale": "en"}}

3  | {"_translated": {"en_CA": {"is_reviewed": "true"}, "default_locale": "en"}}

4  | {"_translated": {"en_CA": {"is_reviewed": "false"}, "default_locale": "en"}}

Я хочу обновить строку, для которой is_reviewed = false, до true.

Выход: -

ID |    Details

-------------------------------------------------------------------------------------------

1  | {"_translated": {"en_US": {"is_reviewed": "true"}, "default_locale": "en"}}

2  | {"_translated": {"en_US": {"is_reviewed": "true"}, "default_locale": "en"}}

3  | {"_translated": {"en_CA": {"is_reviewed": "true"}, "default_locale": "en"}}

4  | {"_translated": {"en_CA": {"is_reviewed": "true"}, "default_locale": "en"}}

Пожалуйста, кто-нибудь может помочь мне в этом вопросе.

1 Ответ

0 голосов
/ 29 октября 2018

Использование jsonb_set (Postgres 9,5 +)

UPDATE t SET details =
jsonb_set(details::jsonb, '{_translated,en_US,is_reviewed}','"true"') where id = 1;
UPDATE t SET details =
jsonb_set(details::jsonb, '{_translated,en_US,is_reviewed}','"true"') where id = 2;
UPDATE t SET details =
jsonb_set(details::jsonb, '{_translated,en_CA,is_reviewed}','"true"') where id = 4;

Демо

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