database - postgresql:重新计算表上的行 ID

标签 database postgresql rdbms

我的表中有 id 列,它是:

  id     BIGSERIAL NOT NULL PRIMARY KEY, ...

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

最佳答案

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

搜索“postgresql 无间隙序列”。

我写了一点关于这个 here .

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

关于database - postgresql:重新计算表上的行 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13883991/

相关文章:

mysql - 使用带有单引号的文本字段恢复 mysql 转储文件

sql - 如何进行累积查询

sql - 使用子查询和连接

sap - Sybase ASE - 跟踪查询/进程

mysql - 在Mysql中执行两个查询时表行数不同

ruby-on-rails - 如何通过仅针对一种情况禁用Ruby on Rails 缓存系统来检索数据库数据?

java - JDBC 格式 ResultSet 为表格字符串?

postgresql - Postgres 方言在 Sequelize 中不起作用

mysql - InnoDB 中是否有估算索引大小的公式?

mysql - 通过 PhpMyAdmin 的复合外键约束?