Heroku自动故障转移到关注者DB。
我注意到故障转移后某些自动增量主键列中存在间隙。例如。在故障转移之前,最新记录的ID为117019,下一条记录的ID为117052.没有记录被删除。
这不是一个问题,我只是好奇这里发生了什么,如果我可以正确地将其归因于故障转移,或者我应该寻找其他解释。< / p>
答案 0 :(得分:1)
这些差距可能是回滚失败的交易的结果。
序列不是事务性的,也就是说,序列在回滚后不会再次返回相同的值。
这是故意的,请参阅the documentation:
为了避免阻止从同一序列获取数字的并发事务,永远不会回滚
nextval
操作;也就是说,一旦获取了一个值,就会被认为是使用过的,并且不会再次返回。即使周围的事务稍后中止,或者调用查询最终没有使用该值,也是如此。 [...]此类情况将在指定值的序列中留下未使用的“漏洞”。因此,PostgreSQL序列对象 不能用于获得“无间隙”序列 。
答案 1 :(得分:0)
PostgreSQL序列或标识列是通常的序列。因此,您的序列可以采用多个值,但其中一些不使用。