我的PostgreSQL 9.2数据库出于某种原因跳过每条记录的ID。例如:
用户
1258930
1258932
1258934
1258936
这会导致什么?任何指向正确方向的指针都可以解决这个问题。谢谢
答案 0 :(得分:1)
评论充分涵盖了可能的原因:
nextval
来电,比如一个default
和一个明确的; 赞赏任何指向正确方向的指针来解决此问题
您的关键错误是将其视为问题。间隙出现在生成的序列中是完全正常的。如果数据库崩溃并重新启动,则序列中将出现间隙。如果事务在分配ID后回滚,则序列中将出现间隙。
您的应用必须能够处理此。它不应该关心ID是什么,只是它是唯一的。
如果您需要真正无间隙的序列,有关详细信息和提示,请参阅this answer。
答案 1 :(得分:0)
添加到Craig的观点我认为你会发现的关键罪魁祸首是DO ALSO
rule
将new.id插入到另一个表中。这将导致RULES
重写查询的双倍递增,因此new.id最终成为“我们上次计算new.id所做的任何事情”(这意味着再次递增序列)。
如果它是一致的,最有可能的原因是IMO是在没有完全理解陷阱的情况下创建DO ALSO规则的人。