加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:02:33 所属栏目:百科 来源:网络整理
导读:所以我想试试PostgreSQL的jsonb.在我的表中,我有一个名为extras of jsonb type的列. 附加内容中的示例数据看起来像{“param1”:10,“param2”:15} 我想仅使用sql语句修改JSON.我想做这样的事情: 如果额外的param2超过12,则通过向其值添加10来更新extras字
所以我想试试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  t1
set     doc = ('{"param1": ' ||
        ((doc->'param1')::text::int + 10)::text ||
        ',"param2": ' ||
        (doc->'param2')::text ||
        '}')::jsonb
where   (doc->'param2')::text::int > 12;

select * from t1;

这打印:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读