Postgresql错误的串口自动递增

wor*_*wer 4 sql postgresql auto-increment

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

有包括表格colmn1(primary key),colmn2(unique),colmn3,...

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

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

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

Sjo*_*erd 9

请参阅PostgreSQL序列常见问题解答:

序列用于生成唯一标识符 - 不一定是严格顺序的标识符.如果两个并发数据库客户端都尝试从序列中获取值(使用nextval()),则每个客户端将获得不同的序列值.如果其中一个客户端随后中止其事务,则将不使用为该客户端生成的序列值,从而在序列中创建间隙.

这不容易修复而不会导致显着的性能损失.有关更多信息,请参阅Elein Mustein 在General Bits Newsletter中的" 主要密钥的无缝序列 ".