Postgresql错误的串口自动递增

时间:2012-09-14 11:02:55

标签: sql postgresql auto-increment

我在postgresql上遇到问题,我认为postgresql中有一个bug,我错误地实现了一些东西。

有一个表格包含colmn1(primary key)colmn2(unique)colmn3,...

插入一行后,如果我尝试使用现有colmn2值进行另一次插入,我会收到重复值错误,正如我预期的那样。但在这次不成功的尝试之后,colmn1的下一个值是 虽然没有插入,但是增加了1,所以我得到的代码为1,2,4,6,9.(3,5,6,7,8的行代表不成功的试验)。

我需要能够解释这种奇怪行为的人的帮助。

此信息可能有用:我使用“create unique index on tableName (lower(column1))”查询来设置唯一约束。

2 个答案:

答案 0 :(得分:8)

请参阅PostgreSQL sequence FAQ

  

序列用于生成唯一标识符 - 不是   必须是严格顺序的标识符。如果两个   并发数据库客户端都尝试从a获取值   序列(使用nextval()),每个客户端将获得不同的序列   值。如果其中一个客户随后中止了他们的交易,   为该客户端生成的序列值将被闲置,   在序列中创造一个空白。

     

在不产生重大性能的情况下,这不容易修复   罚款。有关更多信息,请参阅General Bits Newsletter中的Elein Mustein的“Gapless Sequences for Primary Keys”。

答案 1 :(得分:3)

来自manual

  

重要说明:因为序列是非事务性的,所以进行了更改   如果交易回滚,则不会撤消setval。

换句话说,有差距是正常的。如果您不想要间隙,请不要使用序列。

相关问题