同时 postgresql 更新 jsonb 字段里的多个 key 的值

2019-02-24 21:19:02 +08:00
 hellyeah

对于 postgresql 数据库中的一个 jsonb 字段,该字段存了一个 json,该 json 有个多个 key 和对应的 value,如何用一条语句对该 json 的多个 key 的 value 进行更新呢?或者怎么更新最好呢?

我更新一个 key 的语句如下: UPDATE table SET jsonb_ccolumn = jsonb_set(jsonb_ccolumn,json_path,value) WHERE [condition];

或者不用函数用操作符什么的???小白求教

3259 次点击
所在节点    PostgreSQL
7 条回复
yangg
2019-02-24 22:20:58 +08:00
SET jsonb_column = jsonb_column || {"aa:"1, "bb":2}
hellyeah
2019-02-24 23:04:40 +08:00
@yangg 谢谢了,,这样写会更新整个字段么,还是只更新” aa “,"bb"?
tinybaby365
2019-02-24 23:09:17 +08:00
select '{"a":1, "b":2, "c":3}'::jsonb || '{"a": 2, "b":1}'::jsonb;


{"a": 2, "b": 1, "c": 3}
reus
2019-02-25 08:28:32 +08:00
@hellyeah 所有 jsonb 更新都是更新整个字段,重新写入的。所有字段的更新都是这样的。
hellyeah
2019-02-25 13:07:12 +08:00
@reus really?但是我看有人说 9.5 以上的可以部分更新。周末看到 mysql8 文档也可以部分更新啊(要求新的数据不能比更新前的长)

下文中修改数据部分有提到部分更新,什么情况呢?
http://www.zgljl2012.com/postgresql-cun-qu-jsonb/?utm_source=tuicool&utm_medium=referral
MonoBiao
2019-02-25 13:50:39 +08:00
9.5 的确增强了 jsonb 的运算符和函数的支持,但我认为并不可以“部分更新”,并且仍然需要获得行锁。可以参见官方文档 8.14.2.
reus
2019-02-25 15:04:08 +08:00
@hellyeah 事务模型决定的啊,新的值和旧的值是分开存的,不可能直接覆盖,所以其实就是整个更新,只不过有些字段没变而已。

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

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

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

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

© 2021 V2EX