PostgreSQL总是用偶数ID创建记录?

时间:2012-12-11 17:51:14

标签: ruby-on-rails ruby-on-rails-3 postgresql

我的PostgreSQL 9.2数据库出于某种原因跳过每条记录的ID。例如:

用户

1258930
1258932
1258934
1258936

这会导致什么?任何指向正确方向的指针都可以解决这个问题。谢谢

2 个答案:

答案 0 :(得分:1)

评论充分涵盖了可能的原因:

  • 多个nextval来电,比如一个default和一个明确的;
  • 多个表使用的相同序列
  • 正在回滚的交易
  

赞赏任何指向正确方向的指针来解决此问题

您的关键错误是将其视为问题。间隙出现在生成的序列中是完全正常的。如果数据库崩溃并重新启动,则序列中将出现间隙。如果事务在分配ID后回滚,则序列中将出现间隙。

您的应用必须能够处理此。它不应该关心ID是什么,只是它是唯一的。

如果您需要真正无间隙的序列,有关详细信息和提示,请参阅this answer

答案 1 :(得分:0)

添加到Craig的观点我认为你会发现的关键罪魁祸首是DO ALSO rule将new.id插入到另一个表中。这将导致RULES重写查询的双倍递增,因此new.id最终成为“我们上次计算new.id所做的任何事情”(这意味着再次递增序列)。

如果它是一致的,最有可能的原因是IMO是在没有完全理解陷阱的情况下创建DO ALSO规则的人。