特定のテーブルに新しいオブジェクト(Djangoの用語で)がたくさん作成されているアプリケーションがあるとします。削除される文字の数を気にする必要はありませんが、テーブルを機能的に保つだけで十分です。DjangoテーブルがID/PKカラムのmaxにヒットした場合はどうなりますか?
ID/PK列のテーブルの最大値に達することはありません。次は何が起こる? Djangoはどのようにその状況を処理しますか?
特定のテーブルに新しいオブジェクト(Djangoの用語で)がたくさん作成されているアプリケーションがあるとします。削除される文字の数を気にする必要はありませんが、テーブルを機能的に保つだけで十分です。DjangoテーブルがID/PKカラムのmaxにヒットした場合はどうなりますか?
ID/PK列のテーブルの最大値に達することはありません。次は何が起こる? Djangoはどのようにその状況を処理しますか?
私は2147483648のidをPostgresデータベースで設定しようとしました。 DjangoはDataError: integer out of range
を発生させます。私がPostgresで同じことをしようとすると、私は[22003] ERROR: integer out of range
になる。だから、Djangoはdbエラーをスローするように見えます。
DataErrorのDjangoソースコードを検索すると、 https://github.com/django/django/blob/3c447b108ac70757001171f7a4791f493880bf5b/django/db/utils.py#L53が見つかり、Djangoがバックエンド固有のデータベース例外を再スローすることが確認されています。
あなたは常に自分自身を主キーフィールドを定義し、それをマークすることができ、主として:
:id = models.BigIntegerField(primary_key=True)
する。これは、IDのフォーム2147483647それはUUIDに十分にスイッチされていない場合
9223372036854775807に増加します
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とhttps://docs.djangoproject.com/en/1.10/ref/models/fields/#bigintegerfieldとhttps://docs.djangoproject.com/en/1.10/ref/models/fields/#uuidfield
試しましたか?それをやり遂げるのは難しくないようです。 – allcaps
まだありません。そこを冒険する前に誰かがそれについての経験を持っていたかどうか聞きたい。 – beruic
postgresの場合、オブジェクトのIDを2147483647に設定してからもう一度試してみることができます。 – allcaps