【问题标题】:Why primary key ids are not in sequence?为什么主键 id 不按顺序排列?
【发布时间】:2020-06-22 14:11:33
【问题描述】:

我最后一条记录的主键是 552,当我添加一条新记录时,它分配的主键是 584。

我很惊讶并想知道这种行为的可能原因。

申请详情:

  • 服务器:Heroku 爱好计划 - dyno
  • 数据库:Heroku Postgres
  • 框架:Ruby on Rails

附加信息 -> 我正在使用 rails 管理面板添加新记录

【问题讨论】:

  • 是否有可能添加和删除记录?由于最后一条记录已被删除,ID 号不会被重复使用或重置。
  • 有时我在事务中做某事并且发生错误,记录没有插入,但我的id仍然递增
  • @SteveTurczyn 我需要确认是否发生了这种情况,因为我没有删除任何记录。
  • 您的序列是否将CACHE 设置为大于1 的值?
  • @jjanes 我该如何检查?

标签: ruby-on-rails postgresql heroku rails-activerecord heroku-postgres


【解决方案1】:

可能的原因:

  1. 添加+删除了一些记录
  2. 插入事务由于某种原因被还原,来自postgres manual

    注意:因为 smallserial、serial 和 bigserial 是使用序列实现的,所以即使没有删除任何行,列中出现的值序列也可能存在“漏洞”或间隙。即使包含该值的行从未成功插入到表列中,从序列分配的值仍然“用完”。例如,如果插入事务回滚,则可能会发生这种情况。

  3. 对应序列 table_name_seqincrement 大于 1(可能不是您的情况,有时对分片有用)

【讨论】:

  • 1.我们没有人插入和删除任何数据。 2. 我自己没有重复任何交易,因为一次尝试都成功了。 3. 我检查了我的 information_schema.sequence 它增加了 1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
相关资源
最近更新 更多