我有一个带有jsonb列的DB表.
number | data
1 | {"name": "firstName", "city": "toronto", "province": "ON"}
Run Code Online (Sandbox Code Playgroud)
我需要一种更新数据列的方法.所以我的输出应该是这样的:
{"name": "firstName", "city": "ottawa", "province": "ON", "phone": "phonenum", "prefix": "prefixedName"}
Run Code Online (Sandbox Code Playgroud)
用json_set可以吗?我添加了如下查询:
update table_name set data = jsonb_set(data, '{city}', '"ottawa"') where number = 1;
Run Code Online (Sandbox Code Playgroud)
但是,我需要一种方法来添加新的键值(如果它不存在)并更新键值(如果它存在).是否可以在单个查询中实现此目的?
Abe*_*sto 67
该文件说:
|| 运算符连接每个操作数顶层的元素.... 例如,如果两个操作数都是具有公共键字段名称的对象,则结果中字段的值将只是右手操作数的值.
所以使用你的示例数据:
update table_name set
data = data || '{"city": "ottawa", "phone": "phonenum", "prefix": "prefixedName"}'
where number = 1;
Run Code Online (Sandbox Code Playgroud)
此外,如果您要编辑的对象不在顶层 - 只需组合连接和jsonb_set
功能.例如,如果原始数据看起来像
{"location": {"name": "firstName", "city": "toronto", "province": "ON"}}
Run Code Online (Sandbox Code Playgroud)
然后
...
data = jsonb_set(data, '{location}', data->'location' || '{"city": "ottawa", "phone": "phonenum", "prefix": "prefixedName"}')
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26311 次 |
最近记录: |