如何在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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容