如何在PostgreSQL中更新jsonb列的字段?

如何在PostgreSQL中更新jsonb列的字段?,第1张

概述所以我想试试PostgreSQL的jsonb.在我的表中,我有一个名为extras of jsonb type的列. 附加内容中的示例数据看起来像{“param1”:10,“param2”:15} 我想仅使用sql语句修改JSON.我想做这样的事情: 如果额外的param2超过12,则通过向其值添加10来更新extras字段的param1. 我该如何编写这样的SQL语句?我知道我可以很容易地在应用 所以我想试试Postgresql的Jsonb.在我的表中,我有一个名为extras of Jsonb type的列.

附加内容中的示例数据看起来像{“param1”:10,“param2”:15}

我想仅使用SQL语句修改JSON.我想做这样的事情:

如果额外的param2超过12,则通过向其值添加10来更新extras字段的param1.

我该如何编写这样的SQL语句?我知道我可以很容易地在应用程序层中执行此 *** 作,但我想在sql层本身中执行此 *** 作,因为我可能会处理的行数会很大而且我不想在db-application中浪费时间 – db往返

解决方法 Jsonb类型用于存储整个文档.如果更改文档的任何部分,则需要为列指定新值.因为Postgres将旧版本保留了一段时间,这是一项昂贵的 *** 作.

考虑到这一点,这是一个如何不更新Jsonb列的示例:

create table t1 (doc Jsonb);insert into t1 values     ('{"param1": 10,"param2": 15}'),('{"param1": 10,"param2": 5}');update  t1set     doc = ('{"param1": ' ||        ((doc->'param1')::text::int + 10)::text ||        ',"param2": ' ||        (doc->'param2')::text ||        '}')::Jsonbwhere   (doc->'param2')::text::int > 12;select * from t1;

这打印:

doc------------------------------ {"param1": 10,"param2": 5} {"param1": 20,"param2": 15}(2 rows)
总结

以上是内存溢出为你收集整理的如何在PostgreSQL中更新jsonb列的字段?全部内容,希望文章能够帮你解决如何在PostgreSQL中更新jsonb列的字段?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1161443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存