1

我的表中有 id 列,即:

  id     BIGSERIAL NOT NULL PRIMARY KEY, ...

在删除了某些行之后,该表的 id 不一致,例如 1、10、11、12 ... 即实际行数与 pg 的序列 ID 不符...我想我应该以某种方式重新计算行,对吗?

4

1 回答 1

2

如果您想要无间隙、连续的标识符,请不要使用 aSERIALBIGSERIAL( SEQUENCE)。这是一个常见问题解答。序列不仅不会重复使用已删除的 ID,而且即使您不删除任何内容,它们中也可能存在间隙,因为在事务回滚或数据库不干净重新启动后会丢弃 ID。

搜索“postgresql 无间隙序列”。

我在这里写了一点。

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

于 2012-12-15T03:41:39.977 回答