#25312: Bug: AutoField backed by Postgres 9+ creates error condition
------------------------------+--------------------------------------------
Reporter: infintesimal | Owner: nobody
Type: Bug | Status: new
Component: | Version: 1.7
Uncategorized |
Severity: Normal | Keywords: AutoField, Postgres, Sequences
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
------------------------------+--------------------------------------------
The essence of this bug report is that models.py creates an inherent
conflict between default, autoincrementing id fields (AutoField) and what
a postgres 9.x (9.4 in my case) assigns as the type for the auto
incrementing field. When makemigration creates the sequence, the sequence
is created as a big integer. However, the database table that uses the
sequence (the id field) is created as an integer. So once the value of the
sequence exceeds the maximum value of a 32 bit integer, the insert will
fail.
Below is models.py code and some psql command line foo to illustrate the
problem
{{{
import datetime
import hashlib
import os
from math import sqrt
from random import Random
from django.db import models
from django.db.models.query import Q
from django.utils.text import slugify
from djangoratings.fields import RatingField
from django_pgjson.fields import JsonBField
from django_images.models import Image as BaseImage
from django.utils import timezone
class EventName(models.Model):
event_name = models.CharField(max_length=500, blank=False, null=False)
event_desc = models.CharField(max_length=500, blank=False, null=True)
event_creation_date = models.DateTimeField(auto_now_add=True,null=False)
event_update_date = models.DateTimeField(auto_now=True,null=False)
def __unicode__(self):
return self.name
}}}
{{{
steves_app=> \d eventlogs_eventname_id_seq
Sequence "public.eventlogs_eventname_id_seq"
Column | Type | Value
---------------+---------+----------------------------
sequence_name | name | eventlogs_eventname_id_seq
last_value | bigint | 1
start_value | bigint | 1
increment_by | bigint | 1
max_value | bigint | 9223372036854775807
min_value | bigint | 1
cache_value | bigint | 1
log_cnt | bigint | 0
is_cycled | boolean | f
is_called | boolean | f
Owned by: public.eventlogs_eventname.id
steves_app=> \d eventlogs_eventname
Table "public.eventlogs_eventname"
Column | Type |
Modifiers
---------------------+--------------------------+------------------------------------------------------------------
id | integer | not null default
nextval('eventlogs_eventname_id_seq'::regclass)
event_name | character varying(500) | not null
event_desc | character varying(500) |
event_creation_date | timestamp with time zone | not null
event_update_date | timestamp with time zone | not null
Indexes:
"eventlogs_eventname_pkey" PRIMARY KEY, btree (id)
Referenced by:
TABLE "eventlogs_event" CONSTRAINT
"eventlog_event_id_id_153f5722b6e1dffb_fk_eventlogs_eventname_id" FOREIGN
KEY (event_id_id) REFERENCES eventlogs_eventname(id) DEFERRABLE INITIALLY
DEFERRED
fitcode_app=> alter sequence eventlogs_eventname_id_seq restart with
4294967297;
ALTER SEQUENCE
fitcode_app=> insert into
eventlogs_eventname(event_name,event_desc,event_creation_date,event_update_date)
values ('foo','bar',now(),now());
ERROR: integer out of range
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/25312>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/055.6ee7c378ac0107a29ca924a85f3cd785%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.