【问题标题】:Would Rails ActiveRecord ever run out of ID?Rails ActiveRecord 会用完 ID 吗?
【发布时间】:2018-12-03 22:33:14
【问题描述】:

我正在开发一个 Rails 应用程序,它总是创建一个新记录,然后在用户决定不保存它时删除它。所以我只是想知道是否......

  1. 鉴于 auto_increment 行为,我的数据库将永远用完 ID。
  2. 删除的行的 ID 会被再次使用吗?

编辑:我的数据库是 MySQL。

【问题讨论】:

  • 是的,你可能会用完(例如,hackernoon.com/…),但有办法绕过它。我不记得 PG 是否会重新使用已删除的 ID。
  • @DaveNewton 较新的 Rails 将使用 bigserial,因此用尽的可能性极小,但并非不可能。而且 PostgreSQL 序列是单调递增的,所以旧值不会被重用。
  • 感谢大家的回复。我的数据库目前是 MySQL。
  • 您可以直接查看数据库中的表(即使用mysql CLI 工具)以查看id 是什么类型,然后检查MySQL 文档中的限制。当您在 MySQL 文档中时,请阅读 auto_increment 以了解它如何处理已删除的 ID,但我怀疑它们会被重用。
  • @muistooshort 谢谢!这是BIGINT,需要数千年才能达到极限! (据stackoverflow.com/a/9743313/267693

标签: mysql ruby-on-rails activerecord


【解决方案1】:

这取决于您使用的数据库和 ID 字段的类型。如果使用 postgreql 和 serial 类型,则限制为 2147483647

https://stackoverflow.com/a/17755518/580346

【讨论】:

  • 但 Rails 5+ 使用 bigserial,因此对于更新(或彻底升级)的应用程序,限制将是 9223372036854775807。
【解决方案2】:

从 Rails 5.1 Primary keys for both MySQL and Postgres has been changed to BIGINT 开始,这意味着最大的 ActiveRecord ID 将是 9223372036854775807。

因此,即使您的系统每毫秒创建一个新 ID,仍然需要 292,471,208 年才能用完 BIGINT。因此,简而言之,答案是否定的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-11
    • 2013-10-30
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多