PostgreSQL正在更新jsonb字段中的许多键。
在我的PostgreSQL数据库中,我有以下模式: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, '
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);
如果有一个规范化的数据模型,这会很容易。你说得对。。。