Postgres:增加一个计数器字段

时间:2015-07-20 21:05:07

标签: postgresql

如何增加数据库中的字段,以便即使数据库的数千个连接尝试一次增加它 - 最后也总是1000(如果从零开始)。

我的意思是,没有两个连接增加相同的数字,导致增量丢失。

如何同步并确保数据一致?这是一个必须的商店程序吗?数据库"锁定"?怎么做的?

1 个答案:

答案 0 :(得分:1)

你要找的是Postgres SEQUENCE

您拨打nextval('sequence_name')以获取序列中的下一个号码。

根据the docs, 序列的设计考虑了并发性:

  

为了避免阻塞从同一序列获取数字的并发事务,永远不会回滚nextval操作;也就是说,一旦获取了一个值,它就被认为是使用的,即使稍后执行nextval的事务也会中止。这意味着中止的事务可能会在指定值的序列中留下未使用的“漏洞”。

编辑:

如果您正在寻找无间隙序列,那么2006年有人发布了PostgreSQL邮件列表的解决方案:http://www.postgresql.org/message-id/44E376F6.7010802@seaworthysys.com。似乎还有关于锁定等问题的冗长讨论。

即使从来没有接受过的答案,也会在SO上询问无间隙序列问题: postgresql generate sequence with no gap