PostgreSQL更新了jsonb字段中的许多键。

时间:2018-05-07 13:42:00

标签: sql postgresql

在我的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/f/i49SiaQn6qWcwiWDxVbHnn/8

1 个答案:

答案 0 :(得分:1)

我认为你过分简化了你的问题,因为你的样本数据可以通过简单地覆盖列中的值来实现你想要的目标:

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);