Postgresql - 更新或删除嵌套jsonb元素中的值

Lio*_*orH 4 postgresql json jsonb

有没有办法删除/更新嵌套的json密钥对象(而不是数组),例如以下json:

{
  "top": {
    "nested": {
       "leaf": 1
    }
  }  
}
Run Code Online (Sandbox Code Playgroud)

如何删除/更新叶元素?

我试过了

SELECT jsonb '{"top": {"nested": {"leaf" : 1}}' - '{top,nested,leaf}'

但没有运气

Mar*_*rth 12

您需要使用#-运算符,而不是-:

SELECT jsonb '{"top": {"nested": {"leaf" : 1}}}' #- '{top,nested,leaf}';
???????????????????????????
?        ?column?         ?
???????????????????????????
? {"top": {"nested": {}}} ?
???????????????????????????
(1 row)
Run Code Online (Sandbox Code Playgroud)

文档:

  • -(给定text参数):从左操作数中删除键/值对或字符串元素.键/值对基于其键值进行匹配.
  • -(给定int参数):删除具有指定索引的数组元素(从结尾开始的负整数计数).如果顶级容器不是数组,则会引发错误.
  • #-:删除具有指定路径的字段或元素(对于JSON数组,从末尾开始计算负整数)

  • @ennth:你是什么意思?如果您有一个带有 jsonb 列“j”的表“t”,您将执行“SELECT j -# '{to,remove}' FROM t”。 (2认同)