我想在ID字段中保持逻辑自动增量。
它被定义为SERIAL,但是一旦我删除一行(例如:15)并且稍后插入一个新的ID,ID就变为16(因此,它从14跳到16)。处理这个问题的最佳方法是什么?
答案 0 :(得分:0)
处理这个问题的最佳方法是什么?这很简单。忽略这个问题。
serial
数据类型保证放入自动递增值。它不能保证很多。因此,允许间隙,并且它们确实出现 - 例如,由于删除。这是好的事情。串行列创建主键的主要目的。主键唯一标识每一行,整数数据类型便于将表连接在一起。没有理由在此过程中改变价值。
如果您想要一个自动递增的连续值,那么使用row_number()
获得您想要的输出:
select t.*,
row_number() over (order by id) as MySequentialValueWithNoGaps
from table t