/ / Co się stanie, gdy tabela Django osiągnie wartość maksymalną w kolumnie ID / PK? - django, baza danych django

Co się stanie, gdy tabela Django osiągnie wartość maksymalną w kolumnie ID / PK? - django, baza danych django

Załóżmy, że masz aplikację, gdziekonkretna tabela zawiera wiele nowych obiektów (w kategoriach Django). Nieważne, ile osób zostało usuniętych, ale powiedzmy, że wystarczy, aby utrzymać funkcjonalność stołu.

Po jakimś czasie, jak mało prawdopodobne jest to, tabela osiąga maksimum w kolumnie ID / PK. Co się potem dzieje? Jak Django radzi sobie z taką sytuacją?

Odpowiedzi:

3 dla odpowiedzi № 1

Próbowałem ustawić identyfikator 2147483648 z bazą danych Postgres. Django podnosi DataError: integer out of range. Jeśli spróbuję tego samego w Postgresie, otrzymam [22003] ERROR: integer out of range. Wygląda więc na to, że Django po prostu rzuca błąd db.

Jeśli przeszukuję kod źródłowy Django dla DataError, znajduję: https://github.com/django/django/blob/3c447b108ac70757001171f7a4791f493880bf5b/django/db/utils.py#L53 co potwierdza, że ​​Django ponownie rzuca wyjątki bazy danych specyficzne dla zaplecza.

Zawsze możesz samodzielnie zdefiniować pole klucza podstawowego i oznaczyć je jako podstawowe:

 id = models.BigIntegerField(primary_key=True)

Spowoduje to zwiększenie identyfikatora 2147483647 do 9223372036854775807.

Jeśli to nie wystarczy, przełącz na 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 i https://docs.djangoproject.com/en/1.10/ref/models/fields/#bigintegerfield i https://docs.djangoproject.com/en/1.10/ref/models/fields/#uuidfield