Sql 我有一个名为records的表,它的jsonb类型的数据列包含以下详细信息。我正在使用postgres 9.5
我想将位置更新为地址。如下Sql 我有一个名为records的表,它的jsonb类型的数据列包含以下详细信息。我正在使用postgres 9.5,sql,postgresql,jsonb,postgresql-9.5,Sql,Postgresql,Jsonb,Postgresql 9.5,我想将位置更新为地址。如下 { "propertyDetail": { "Plot NO": "11", "Society Name": "Trinity" }, "personalDetail": { "Name": "Allen", "Location": "M
{
"propertyDetail": {
"Plot NO": "11",
"Society Name": "Trinity"
},
"personalDetail": {
"Name": "Allen",
"Location": "Mumbai",
"emal": "abc@gmail.com"
}
}
我认为没有比添加新的(使用
jsonb_set
)和删除旧的(使用-
)更好的方法了:
'''
更新记录集数据=replace(数据::text,“'Location”“,“'Address”“)::jsonb;
''我正在迁移一个旧数据库,或者我必须将位置更新为位置或地址。由于前端的逻辑是全部开发的,我无法删除和添加新的,因为我正在迁移超过30万条记录的数据。这就是我想要更新的原因。没有理由不能对3个10万条记录进行更新。感谢您的响应,我找到了解决方案更新记录集data=replace(data::text,“‘Location’,“‘Address’”)::jsonb;如果
“Location”
在其他上下文中出现,比如作为值而不是键出现,那么这将导致混乱。
{
"propertyDetail": {
"Plot NO": "11",
"Society Name": "Trinity"
},
"personalDetail": {
"Name": "Allen",
"Address": "Mumbai",
"emal": "abc@gmail.com"
}
}
update thetable set x=
jsonb_set(x,'{personalDetail,Address}',x#>'{personalDetail,Location}')
#-'{personalDetail,Location}'