更新 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}]')
我 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}]')