我的表中有id列,即:
id BIGSERIAL NOT NULL PRIMARY KEY, ...
在某些行被删除之后,表会得到不一致的id,如1,10,11,12 ...... 即实际行数不符合pg的序列号... 我想我应该以某种方式重新计算行数,是吗?
答案 0 :(得分:2)
如果您想要无间隙的顺序标识符,请不要使用SERIAL
或BIGSERIAL
(SEQUENCE
)。这是一个FAQ。序列不仅不会重复使用已删除的ID,而且即使您不删除任何内容,它们也可能存在间隙,因为在事务回滚时或在不正常重新启动数据库后丢弃ID。
搜索“postgresql gapless sequence”。
我写了一点点here。
如果您使用的是合成密钥,您应该只关心ID是否与另一个ID相同。不要试图比较它们说“A和B之间有多少ID”;使用SEQUENCE
生成的ID没有意义。