Postgresql:修改嵌套 json 列内的一个值

Ann*_*ina 6 postgresql json

我在“资产”表中有一个名为“参数”的 json 列。json 是嵌套的并具有以下结构:

{
"params1": {"k": 1.1, "efficiency": 0.7}, 
"params2": {"k": 1.9, "C_max": 100.0, "C_min": 10.0}
}
Run Code Online (Sandbox Code Playgroud)

我只想更新“params2”中的一个值“k”,并保持其余值不变。我尝试使用以下代码:

update "Assets" 
set "Parameters" = "Parameters"::jsonb || '{"params2":{"k":2.2}}'::jsonb
where "Id" = 185;
Run Code Online (Sandbox Code Playgroud)

这导致

{
"params1": {"k": 1.1, "efficiency": 0.7}, 
"params2": {"k": 2.2}
}
Run Code Online (Sandbox Code Playgroud)

因此“params2”中的其余参数被删除,这是不希望的。修改“k”并保持其余部分不变的方法是什么?

小智 14

您正在寻找jsonb_set()文档

update "Assets" 
  set "Parameters" = jsonb_set("Parameters"::jsonb, '{params2, k}', to_jsonb(2.2))
where ...
Run Code Online (Sandbox Code Playgroud)