微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

所以我想试试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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐