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

PostgreSQL正在更新jsonb字段中的许多键。,sql,postgresql,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, '

在我的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\u results
表中的所有记录,以便在
data
列中具有以下值:

{"user":{"dob": '1995'},"survey":{"id": '1234'}}
我该怎么做?我试图用
jsonb_set
来实现这一点,但我无法设置所有键。有什么想法吗

这是sqlfiddle:


我认为您的问题过于简单化了,因为对于示例数据,您只需覆盖列中的值即可实现所需:

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

如果有一个规范化的数据模型,这会很容易。你说得对。。。