新的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] 举报,一经查实,本站将立刻删除。