【问题标题】:Django+PostgreSql: Can I run out of id/pk?Django+PostgreSql:我可以用完 id/pk 吗?
【发布时间】:2017-10-26 05:47:41
【问题描述】:

在我的应用程序中,我需要一个设置,让每个用户在数据库中都有一些派生/计算的信息。它应该是最多 100 个不同的数据集,每个用户大约 100 行 (100x100)。这些行需要大约每三个月刷新一次。所以,假设有 10000 个用户,如果每个人都使用所有一百个地方,每 3 个月重新创建 1 亿行。据我所知,Postgre int 字段为 2147483647,即 2100M+。那么,使用这种设置,我会在 5 年内用完 id/pk 吗?

我应该重新考虑我的设置还是有办法解决?

我使用的是 Python 2.7.6,PostgreSQL 服务器是 9.3 和 Django 1.8。

【问题讨论】:

  • django id integer limit的可能重复
  • Django(1.10 起)提供BigAutoField。您需要创建models.Model 的子类,覆盖id 字段,然后从该字段继承。
  • @Kendas:好建议。那么,在某个时间点,数据库真的必须使用价值数百万的 id 吗?我希望有一些自动重新索引或类似的东西,在它达到疯狂的数字之前...... :-)
  • @Kendas:如果您想重新发表您的评论作为我接受的答案,它会为我提供有关如何修改我的项目的更具体信息。
  • 不幸的是,不,它只是在不断增长。

标签: python django postgresql


【解决方案1】:

我的第一反应是使用BigAutoField,但这在 Django 1.8 中不存在。在任何情况下,您都可以这样使用它:

from django.db import models

class CustomIDModel(models.Model):
    id = models.BigAutoField(primary_key=True)

class SomeModel(CustomIDModel):
    some_field = model.BooleanField()
    # More

不过,Django 1.8 确实有 UUIDField。这更大,但应该可以解决问题。

import uuid
from django.db import models

class CustomIDModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

class SomeModel(CustomIDModel):
    some_field = model.BooleanField()
    # More

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2013-01-06
    • 2021-06-22
    • 2012-08-25
    • 2019-03-30
    • 1970-01-01
    相关资源
    最近更新 更多