postgresql:表上的无数行ids

时间:2012-12-14 18:03:51

标签: database postgresql rdbms

我的表中有id列,即:

  id     BIGSERIAL NOT NULL PRIMARY KEY, ...

在某些行被删除之后,表会得到不一致的id,如1,10,11,12 ...... 即实际行数不符合pg的序列号... 我想我应该以某种方式重新计算行数,是吗?

1 个答案:

答案 0 :(得分:2)

如果您想要无间隙的顺序标识符,请不要使用SERIALBIGSERIALSEQUENCE)。这是一个FAQ。序列不仅不会重复使用已删除的ID,而且即使您不删除任何内容,它们也可能存在间隙,因为在事务回滚时或在不正常重新启动数据库后丢弃ID。

搜索“postgresql gapless sequence”。

我写了一点点here

如果您使用的是合成密钥,您应该只关心ID是否与另一个ID相同。不要试图比较它们说“A和B之间有多少ID”;使用SEQUENCE生成的ID没有意义。