【PostgreSQL】更新 PostgreSQL 中 JSON 数据类型中的某个键对应的值
更新 PostgreSQL 中 JSON 数据类型中的某个键对应的值
要更新 PostgreSQL 中 JSON 数据类型中的某个键对应的值,可以使用 jsonb_set
函数。该函数的语法如下:
jsonb_set(target jsonb, path text[], new_value jsonb[, create_missing boolean])
其中,target
是要更新的 JSON 数据类型,path
是要更新的键的路径,new_value
是要更新的新值,create_missing
是一个可选参数,如果设置为 true
,则会在路径中创建缺失的键。
例如,假设有以下 JSON 数据类型:
{
"name": "John",
"age": 30,
"address": {
"city": "New York",
"state": "NY"
}
}
要将 address
的 city
更新为 Los Angeles
,可以使用以下 SQL 语句:
UPDATE my_table SET my_jsonb_column = jsonb_set(my_jsonb_column, '{address,city}', '"Los Angeles"') WHERE id = 1;
这将更新 my_table
表中 id
为 1
的行中的 my_jsonb_column
列中的 address
的 city
值为 Los Angeles
。
-- JSON类型
create table test_t (id serial, student jsonb);
truncate table test_t;
insert into test_t values(1,'{"name":"zhangsan","sex":"male"}'),(2,'{"name":"lisi","sex":"female"}');
select * from test_t;
-- 更新整个json字段
update test_t set student='{"name":"wangwu"}' where id=1;
-- 更新某个键的值
update test_t set student=jsonb_set(student,'{name}','"wangwu"') where id=1;
-- 针对json类型处理:
update test_t set student = (jsonb_set(student::jsonb, '{name}', '"zhangsan1"',false))::json where id=1;