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
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
评论充分涵盖了可能的原因:
nextval
电话,一个接一个default
,一个明确的;任何指向正确方向以解决此问题的指针表示赞赏
您的主要错误是将此视为一个问题。间隙出现在生成的序列中是完全正常的。如果您的数据库崩溃并重新启动,则会在序列中出现间隙。如果事务在分配 ID 后回滚,则序列中会出现间隙。
您的应用程序必须能够处理此问题。它不应该关心 ID 是什么,只关心它是唯一的。
有关详细信息和提示,如果您需要真正的无间隙序列,请参阅此答案。
添加到克雷格的观点,我认为你会发现的关键罪魁祸首是DO ALSO
rule
将 new.id 插入另一个表。这将导致RULES
重写查询时双倍递增,因此 new.id 最终成为“我们上次为计算 new.id 所做的一切”(这意味着再次递增序列)。
如果它是一致的,最可能的原因是 IMO 是有人在没有完全理解陷阱的情况下创建 DO ALSO 规则。