【问题标题】:What if django model incremental pk finished [duplicate]如果django模型增量pk完成怎么办[重复]
【发布时间】:2018-08-15 04:42:36
【问题描述】:

在 Django 中,如果你不指定primary key,它将添加一个integer autofield。我的问题是,如果这个增量 id 达到整数限制,之后会发生什么?

【问题讨论】:

    标签: python django python-3.x postgresql django-models


    【解决方案1】:

    数据库将引发错误,插入您插入的任何内容都会失败。

    如果您使用的是 MySQL,错误可能是这样的:ERROR 1467 (HY000): Failed to read auto-increment value from storage engine

    django 的自动增量 id 的限制是 2,147,483,647。因此,除非您存储大量数据,否则您不太可能达到此限制。如果您使用大量数据,则可以使用bigint 类型的字段代替。

    【讨论】:

      【解决方案2】:

      在 postgresql 中,ID 字段的最大数量是 9223372036854775807

      如果您的数据库有这些数量的记录,它就不起作用。假设一个简单的排序查询需要一年多的时间来执行

      或者如果每条记录占用 100 字节(索引和...数据对于每条记录来说太少了),则此记录量占用 838860700 TB 存储空间。全世界都没有存储这些数据的存储空间。

      【讨论】:

      • 这不是真的。尽管对于 postgres,最大值可能是 9223372036854775807,但 django 使用整数字段而不是您引用的 bigautofield。
      • 我没有那么多数据,但我的行被频繁地删除和插入。并且以前的 id 不再使用。所以达到极限是可能的
      • 我假设您使用大型自动字段。整数字段限制为 2,147,483,647 且无法访问。但如果你想要这么多的记录,你可以做其中之一。 1-将youf字段转换为大整数自动字段。 2-如果您的旧数据从数据库中删除,您可以在达到此数量时重置模型的序列。但它可能会导致您的数据库无法正常工作。注意旧记录。
      猜你喜欢
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 2011-07-25
      相关资源
      最近更新 更多