使用自己的键将 JSONB 字段从单个值转换为对象

Convert JSONB field from single value to object with own keys

我有一个table,我们称它为myTable,结构如下

ID   | data
____________
uuid | jsonb

jsonb字段中的数据是一个结构如下的数组:

[
  {
    "valueA": "500",
    "valueB": "ABC",
  },
  {
    "valueA": "300",
    "valueB": "CDE",
  }
]

我想做的是通过将 valueB 转换为一个对象来转换该数据,其中 newKey 对应于“valueB”的当前值

这是我想要的结果:

[
  {
    "valueA": "500",
    "valueB": {"newKey": "ABC"},
  },
  {
    "valueA": "300",
    "valueB": {"newKey": "CDE"},
  }
]

我尝试使用以下查询进行操作:

UPDATE myTable
SET data = (
    SELECT jsonb_agg (
        jsonb_insert(elems, '{valueB, newKey}', elems->'valueB')
    )
    FROM jsonb_array_elements(data) elems
);

不幸的是,它似乎没有做任何事情。

我的另一个想法是创建一个新字段,将其初始化为一个对象,然后删除旧的 onde 并重命名新的,但似乎必须有一种方法可以直接做我想做的事?

使用jsonb_build_object()

解决
UPDATE myTable
SET data = (
    SELECT jsonb_agg (
        jsonb_insert(elems, '{valueB}', jsonb_build_object('newKey', elems->'valueB'))
    )
    FROM jsonb_array_elements(data) elems
);