当 Django table 在 ID/PK 列上达到最大值时会发生什么?

What happens when a Django table hits max on an ID/PK column?

假设您有一个应用程序,其中特定 table 创建了很多新对象(在 Django 术语中)。不管删除了多少,但假设足以保持 table 功能。

过了一段时间后,table 达到了 ID/PK 列的最大值,这是多么不可能。接下来发生什么? Django 如何处理这种情况?

我尝试使用 Postgres 数据库设置 id 2147483648。 Django 加注 DataError: integer out of range。如果我在 Postgres 中尝试相同的方法,我会得到 [22003] ERROR: integer out of range。所以看起来 Django 只是抛出数据库错误。

如果我在 Django 源代码中搜索 DataError,我会发现: https://github.com/django/django/blob/3c447b108ac70757001171f7a4791f493880bf5b/django/db/utils.py#L53 这确认 Django 重新抛出特定于后端的数据库异常。

您始终可以自己定义主键字段并将其标记为主要字段:

 id = models.BigIntegerField(primary_key=True)

这会将 id 的表单 2147483647 增加到 9223372036854775807。

如果这还不够切换到 uuid:

id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

https://docs.djangoproject.com/en/1.10/topics/db/models/#automatic-primary-key-fields and https://docs.djangoproject.com/en/1.10/ref/models/fields/#bigintegerfield and https://docs.djangoproject.com/en/1.10/ref/models/fields/#uuidfield