将列作为键移动到 JSONB 字段中
Moving a Column into JSONB Field as Key
我正在使用 Postgres 数据库并且有一个 table 如下所示
id firstname lastname settings
1 Sam Crews {"some_key": some_value}
2 John Dave {"some_key": some_value}
我正在尝试将其中一列移至设置 json 并删除该列。于是就变成了,
id firstname settings
1 Sam {"some_key": some_value, "lastname": "Crews"}
2 John {"some_key": some_value, "lastname": "Dave"}
将列移动到 jsonb 字段的 postgres 语法是什么?一直在寻找,但似乎无法弄清楚。
您需要 运行 更新以将 key/value 对添加到现有 JSON 值。
update the_table
set settings = settings||jsonb_build_object('lastname', lastname)
如果 settings
可能为空,您可以使用 coalesce()
update the_table
set settings = coalesce(settings, '{}) || jsonb_build_object('lastname', lastname)
然后您可以删除该列
alter table the_table
drop column lastname;
但这听起来不是个好主意。为什么 de-normalize 这会让你的生活在漫长的 运行 中变得更加艰难?
我正在使用 Postgres 数据库并且有一个 table 如下所示
id firstname lastname settings
1 Sam Crews {"some_key": some_value}
2 John Dave {"some_key": some_value}
我正在尝试将其中一列移至设置 json 并删除该列。于是就变成了,
id firstname settings
1 Sam {"some_key": some_value, "lastname": "Crews"}
2 John {"some_key": some_value, "lastname": "Dave"}
将列移动到 jsonb 字段的 postgres 语法是什么?一直在寻找,但似乎无法弄清楚。
您需要 运行 更新以将 key/value 对添加到现有 JSON 值。
update the_table
set settings = settings||jsonb_build_object('lastname', lastname)
如果 settings
可能为空,您可以使用 coalesce()
update the_table
set settings = coalesce(settings, '{}) || jsonb_build_object('lastname', lastname)
然后您可以删除该列
alter table the_table
drop column lastname;
但这听起来不是个好主意。为什么 de-normalize 这会让你的生活在漫长的 运行 中变得更加艰难?