关于 pgsql 中 jsonb 类型数据的更新问题

2020-09-29 15:04:56 +08:00
 jiobanma

如一张 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 去进行相应的操作。

还有其他什么好的办法吗

965 次点击
所在节点    Java
3 条回复
crclz
2020-09-29 22:25:34 +08:00
最简单、最不容易出 bug 的解决方案是:整存整取。
唯一的问题是性能问题。所以,一个 jsonb 字段既不能过大从而影响性能,也不能过小从而让一个业务操作设计太多实体。
pabupa
2020-09-30 03:16:59 +08:00
可以用操作符。

`select '{"A":1,"B":2}'::jsonb || '{"A":3, "D": 4}';`
jiobanma
2020-09-30 09:10:58 +08:00
@crclz #1 是的 整存整取确实就没这个问题了,但是我们现在数据库设计的比较... 查询出来的数据是视图里处理好的数据 更新时要往基础表更新 有很多字段对应不上,前端那边是不知道字段的对应关系的,所以有些业务整存整取无法实现。
@pabupa #2 现在用的就是这个 被百度误导了 以为这个操作符只是在之前的数据后边拼接 不会覆盖的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/711580

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX