将列作为键移动到 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 这会让你的生活在漫长的 运行 中变得更加艰难?