我们正在使用hibernate,jpa和spring,我们的db是postgres 9.我们使用sequence来自动生成主键。但是我们注意到,当在表中插入新记录时,它会跳过20个数字,并且在我们的序列中,我们将增量加1,然后为什么postgres将下一个值递增到20.我们确实使用缓存值为“20”。 / p>
答案 0 :(得分:0)
这是正常的。您可以告诉Hibernate不要缓存序列值 - 性能成本为insert
- 但仍并不意味着您不会有序列间隙。
I wrote more about this on an older answer - here
序列有差距。这是他们的本性。如果它们没有间隙,您一次只能插入一个事务。
请参阅:
了解详情。
如果您期望无间隙序列,则需要了解您必须按顺序执行所有插入操作,一次只能处理一个事务。要了解更多信息,请搜索“postgresql gaples sequence”。依靠DB中的无间隙序列通常是一个坏主意;相反,让你的应用程序在使用row_number()
窗口函数或类似函数获取值时构造用户可见的值。
相关: