我的表中有 id 列,它是:
id BIGSERIAL NOT NULL PRIMARY KEY, ...
在删除了一些行后,表的 ID 不一致,例如 1、10、11、12 ... 即实际行数与 pg 的序列号不一致...... 我想我应该以某种方式重新计算行数,对吗?
最佳答案
如果您想要无缝的顺序标识符,请不要使用 SERIAL
或 BIGSERIAL
(SEQUENCE
)。这是一个常见问题解答。序列不仅不会重复使用已删除的 ID,而且即使您不删除任何内容,它们也可能存在间隙,因为在事务回滚或数据库不正常重启后 ID 会被丢弃。
搜索“postgresql 无间隙序列”。
我写了一点关于这个 here .
如果您使用合成键,您应该只关心一个 ID 是否等于另一个 ID。不要试图比较它们说“A 和 B 之间有多少个 ID”;这对 SEQUENCE
生成的 ID 没有意义。
关于database - postgresql:重新计算表上的行 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13883991/