我在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))
”查询来设置唯一约束。
答案 0 :(得分:8)
序列用于生成唯一标识符 - 不是 必须是严格顺序的标识符。如果两个 并发数据库客户端都尝试从a获取值 序列(使用nextval()),每个客户端将获得不同的序列 值。如果其中一个客户随后中止了他们的交易, 为该客户端生成的序列值将被闲置, 在序列中创造一个空白。
在不产生重大性能的情况下,这不容易修复 罚款。有关更多信息,请参阅General Bits Newsletter中的Elein Mustein的“Gapless Sequences for Primary Keys”。
答案 1 :(得分:3)