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

PostgreSQL hstore中的原子增量,如MongoDB中的$inc

新的pg hstore看起来很棒

http://www.postgresql.org/docs/devel/static/hstore.html

但似乎不像MongoDB那样支持原子增量?

db.mycoll.update({mykey: myval},{my_counter: {$inc: 1}})

如何使用Postgresql Hstore执行此操作?

解决方法

MongoDB需要$inc运算符,因为:

>如果没有特定的低级支持,MongoDB中的原子操作很困难.
>界面不够丰富,无法在没有特殊操作符的情况下表达c = c 1.

你只需要用hstores表达c = c 1.这个任务很复杂,因为hstores使用字符串来表示键和值,这会让你有一堆乱七八糟的东西.我想你会遇到像这样讨厌的事情:

update t
set h = h || hstore('my_counter',((h -> 'my_counter')::integer + 1)::text)
where mykey = myval

(h – >’my_counter’):: integer 1通过提取值(h – >’my_counter’),将其转换为整数并向其中添加一个来进行增量.然后使用hstore(‘my_counter’,…)构建单个元素hstore,并在值上显示一个显式的:: text,以确保Postgresql知道您想要哪个函数.最后,使用h ||将新键值连接到原始hstore hstore(…)替换旧值.

如果你不想一直使用那种有点讨厌的混乱,那么你可以将它包装成一个简单的函数并说:

update t
set h = hstore_inc(h,'my_counter',1)
where ...

隐藏肮脏.

我确信还有其他方法可以做到(使用各种to/from array函数)但上面的方法应该可行.

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

相关推荐