1

my PostgreSQL 9.2 database for some reason skips an ID with every record. Example:

User

1258930
1258932
1258934
1258936

What would cause this? Any pointer in the right direction to resolve this issue is appreciate. Thank you

4

2 回答 2

1

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

  • 多个nextval电话,一个接一个default,一个明确的;
  • 多个表使用相同的序列
  • 正在回滚的事务

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

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

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

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

于 2012-12-12T01:52:17.683 回答
0

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

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

于 2013-04-07T14:54:47.480 回答