如一张 pgsql 的表里面有个字段 data 的属性为 jsonb,在进行更新操作时如何对传入的 json 字符串进行解析,对应源数据如果有相同的 key 就替换 value,如果没有,就新增一个 key-value 进去。
比如源数据为{"A":"a","B":"b","C":"c"} 执行更新时我传入的参数为:{"A":"00","D":"d"}
希望的到的数据是:{"A":"a","B":"b","C":"c"}
查了查 jsonb_set 这个函数,感觉这个只能指定某个 key 和 value 来进行更新,而不能只能识别我传入的一个 json
去进行相应的操作。
还有其他什么好的办法吗
1
crclz 2020-09-29 22:25:34 +08:00
最简单、最不容易出 bug 的解决方案是:整存整取。
唯一的问题是性能问题。所以,一个 jsonb 字段既不能过大从而影响性能,也不能过小从而让一个业务操作设计太多实体。 |
2
pabupa 2020-09-30 03:16:59 +08:00
可以用操作符。
`select '{"A":1,"B":2}'::jsonb || '{"A":3, "D": 4}';` |