PostgreSQL обновляет множество ключей в поле jsonb. - PullRequest
0 голосов
/ 07 мая 2018

В моей базе данных PostgreSQL у меня есть следующая схема:

CREATE TABLE survey_results (
    id integer,
    data jsonb DEFAULT '{}'::jsonb
);

INSERT INTO survey_results (id, data)
    VALUES (1, '{"user": {}, "survey": {}}');

INSERT INTO survey_results (id, data)
    VALUES (2, '{"user": {}, "survey": {}}');

Я хочу обновить все записи в таблице survey_results, чтобы в столбце data были указаны следующие значения:

{"user":{"dob": '1995'},"survey":{"id": '1234'}}

Как я могу это сделать? Я пытался сделать это с jsonb_set, но я не смог установить все ключи. Есть идеи?

Вот sqlfiddle:

https://www.db -fiddle.com / ж / i49SiaQn6qWcwiWDxVbHnn / 8

1 Ответ

0 голосов
/ 07 мая 2018

Полагаю, вы упростили свой вопрос, поскольку с помощью данных примера вы можете достичь желаемого, просто перезаписав значение в столбце:

update survey_results
  set data = '{"user": {"dob": 1995}, "survey": {"id": 1234}}'::jsonb

Если вы хотите сохранить потенциальные другие ключи в документе JSON и обновить только эти два ключа, вам нужно вложить вызовы jsonb_set() для каждого ключа, который вы хотите изменить:

update survey_results
  set data = jsonb_set(jsonb_set(data, '{user}', '{"dob": 1995}', true), '{survey}', '{"id": 1234}', true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...