postgreSQL错误的串行自动增量[英] Postgresql wrong auto-increment for serial

本文是小编为大家收集整理的关于postgreSQL错误的串行自动增量的处理方法,想解了postgreSQL错误的串行自动增量的问题怎么解决?postgreSQL错误的串行自动增量问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

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

有一个表,包括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))"查询来设置唯一约束.

推荐答案

请参阅 postgreSQL序列常见问题:

序列旨在生成唯一标识符 - 不是 必然是严格顺序的标识符.如果是二 并发数据库客户端都尝试从a获取值 序列(使用NextVal()),每个客户端将获得不同的序列 价值.如果其中一个客户随后中止他们的交易, 为该客户端生成的序列值将未使用, 在序列中创建间隙.

这不能轻易解决而不会产生显着性能 惩罚.有关更多信息,请参阅elein mastein的" Gepless/130.php">"Genered Keys通讯中的主要键".

其他推荐答案

手动:

重要提示:因为序列是非交易的,所以改变 如果事务回滚,则SetVal不会撤消.

换句话说,具有空白是正常的.如果您不想要空白,请不要使用序列.

本文地址:https://www.itbaoku.cn/post/1763921.html