更新 Postgresql 中 JSON 个元素的值

Update the value of JSON elements in Postgresql

我 table 具有以下 table 结构:

create table instances(
                       id               bigint, 
                       createdate       timestamp, 
                       createdby        bigint, 
                       lastmodifieddate timestamp, 
                       lastmodifiedby   bigint, 
                       context          text
                       )

字段 context 包含一个 JSON 数据,即

insert into instances values 
(1, '2020-06-01 22:10:04', 20112,'2020-06-01 22:10:04',20112, 
    '{"id":1,"details":[{"binduserid":90182}]}')

我需要使用 postgres 查询将 JSON 元素 binduserid 的所有值替换为值 90182。

我是通过使用REPLACE函数实现的:

update instances 
   set context = replace(context, '"binduserid":90182','"binduserid":1000619')

有没有其他方法可以使用 Postgres JSON 函数

首先,让我们考虑将列存储为 JSON 或 JSONB 那些已经被定义为正确保存数据并以生产方式使用,例如不需要类型之间的转换,例如持有DATE 格式的 DATE 值而不是 STRING。

在这种情况下,我考虑 JSONB 数据类型中的 context 列。

您可以使用 JSONB_SET() 函数以获得所需的结果,其中第一个参数 (target) 可能是数组格式,通过使用 JSONB_BUILD_ARRAY() 带有索引的函数(在这种情况下 '{0,details}' 中的 0 )可以通过以下 DML 语句轻松操作:

UPDATE instances
   SET context = 
          JSONB_SET(JSONB_BUILD_ARRAY(context), '{0,details}','[{"binduserid":1000619}]')

Demo