sql – 如何在JSON键上的postgres update语句中增加值
发布时间:2021-03-30 13:46:32 所属栏目:MsSql 来源:互联网
导读:更新关系表时: CREATE TABLE foo ( id serial primary key, credit numeric);UPDATE foo SET bar = bar + $1 WHERE id = $2; 但是,JSON中的等效项不起作用: CREATE TABLE foo ( id serial primary key, data json);UPDATE foo SET d
更新关系表时: CREATE TABLE foo ( id serial primary key,credit numeric); UPDATE foo SET bar = bar + $1 WHERE id = $2; 但是,JSON中的等效项不起作用: CREATE TABLE foo ( id serial primary key,data json); UPDATE foo SET data->'bar' = data->'bar' + $1 WHERE id = $2; 我得到的错误是错误:语法错误在“ – >”或附近 – 这是相当模糊的. 我该怎么做呢? 我正在使用postgres 9.3.4 根据@ GordonLinoff在下面的评论,我创建了一个功能请求:https://postgresql.uservoice.com/forums/21853-general/suggestions/6466818-create-update-delete-on-json-keys 如果您也想要此功能,可以对其进行投票. 解决方法您可以使用jsonb执行此操作,至少使用Postgres 9.5.2.鉴于下表: CREATE TABLE users (id INT,counters JSONB NOT NULL DEFAULT '{}'); 使用示例数据: INSERT INTO users (id,counters) VALUES (1,'{"bar": 0}'); SELECT * FROM users; id | counters ----+------------ 1 | {"bar": 0} 您可以原子地增加JSON中的“bar”键: UPDATE users SET counters = counters || CONCAT('{"bar":',COALESCE(counters->>'bar','0')::int + 1,'}')::jsonb WHERE id = 1; SELECT * FROM users; id | counters ----+------------ 1 | {"bar": 1} 它不漂亮,但它的工作原理. 这里分为几步: 您可以通过对jsonb对象进行OR运算将jsonb中的键设置为显式值: UPDATE users SET counters = counters || '{"bar": 314}'::jsonb WHERE id = 1; SELECT * FROM users; id | counters ----+-------------- 1 | {"bar": 314} 现在剩下要做的就是在CONCAT()的帮助下动态构建字符串,同时演示一个未定义的键递增(27)(在COALESCE()的帮助下默认初始值): UPDATE users SET counters = counters || CONCAT('{"foo":',COALESCE(counters->>'foo','0')::int + 27,'}')::jsonb WHERE id = 1; SELECT * FROM users; id | counters ----+------------------------- 1 | {"bar": 314,"foo": 27} 鲍勃是你的叔叔. (编辑:鲜蔬坊站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- jsf – 如何在运行时使用数据库中的值初始化inputtextfield
- SQLServer 批量导入目录文件
- 如何将从Exchange数据库中提取的PST导入到Linux IMAP服务器
- sql-server – 层次结构中子级别总和的总和
- sql – 我得到:“你试图执行一个不包含指定表达式’OrdID’
- sql-server-2008 – 在所有表和索引上启用行级压缩
- 揭秘SQL Server 2014有哪些新特性(4)-原生备份加密
- sqlserver四舍五入使用round函数及cast和convert函数
- MSSQL批量替换语句 在SQL SERVER中批量替换字符串的方法
- 彻底删除SQL Server注册表的方法
推荐文章
站长推荐
- sql-server-2008-r2 – SQL Server – 任何人都使
- Transactional replication(事务复制)详解之如
- SQL SERVER先判断视图是否存在然后再创建视图的语
- sql – 如何在此表中找到重复的连续值?
- SQL Server DBA日常检查常用SQL
- SQLServer 使用ADSI执行分布式查询ActiveDorecto
- mssql 30万条数据 搜索文本字段的各种方式对比
- SQL server 使用 内联结(INNER JOIN) 联结多个表
- SQL获取第一条记录的方法(sqlserver、oracle、my
- 解决SqlServer 各版本 sa帐户不能登录问题
热点阅读