首页 > 解决方案 > postgresql的`jsonb_set`中的`target`是什么意思?

问题描述

jsonb在 postgresql11 的列中使用类型。我想更新 json 数据中的一个字段,我看到有一个jsonb_set可以使用的函数。(https://www.postgresql.org/docs/current/functions-json.html)。

但是,根据文件,

jsonb_set ( target jsonb, path text[], new_value jsonb [, create_if_missing boolean ] ) → jsonb

返回 target,将 path 指定的项目替换为 new_value,或者如果 create_if_missing 为 true(这是默认值)并且 path 指定的项目不存在,则添加 new_value。路径中的所有早期步骤都必须存在,否则目标将原封不动地返回。与面向路径的运算符一样,出现在路径中的负整数从 JSON 数组的末尾开始计数。如果最后一个路径步骤是超出范围的数组索引,并且 create_if_missing 为真,则如果索引为负,则将新值添加到数组的开头,如果索引为正,则将新值添加到数组的末尾。

第一个论点是target。这里是什么target意思?我是否需要进行查询以获取现有值并将其设置为target

我试过下面的更新语句:

我目前的数据是:

# select "taxes" from "Sites" where "id" = '6daa9b5d-d5b2-4b0d-a8ee-5ad2cb141594';
                                               taxes
--------------------------------------------------------------------------------------------------------------
 {"feePercent": 0, "percent": 0}

我尝试了以下更新:

# update "Sites" set "feePercent" = jsonb_set('{"feePercent": 0, "percent": 0}', '{feePercent}', 1) where "siteUuid"='6daa9b5d-d5b2-4b0d-a8ee-5ad2cb141594';

但我得到以下错误:

ERROR:  function jsonb_set(unknown, unknown, integer) does not exist
LINE 1: update "Sites" set "feePercent" = jsonb_set('{"feePerce...

标签: postgresql

解决方案


jsonb_set()修改特定的 JSON 对象。因此,您的目标是您要修改的 JSON 对象(或 JSON 列)。

jsonb_set(my_jsonb_to_be_modified, ...)

所以,如果你有这个 JSON 对象;

{"my":"old", "json":"object"}

使用该功能,您可以将其变成:

{"my":"new", "json":"object"}

代码是:

演示:db<>小提琴

SELECT jsonb_set('{"my":"old", "json":"object"}', '{my}', '"new"')

target原始 JSON 对象,path指向您要修改的元素,并且new_value是您在路径中指定的元素的新值。

在那种情况下,我的值old​​变成了new现在。


推荐阅读