2013-10-02 10 views
13

Wystąpił problem, otrzymuję powyższy komunikat o błędzie po uruchomieniu "python manage.py syncdb" Pracuję na dość starym teren. To "działa django 1.2.6 z postgres DB.django.db.utils.IntegrityError: zduplikowana wartość klucza narusza wyjątkowe ograniczenie "django_content_type_pkey"

Uruchomienie nie zostało zainstalowane na południe i udało mi się sprawić, że działa. Run python manage.py schemamigration --initial contact_enquiries, który działał dobrze i poprosił mnie o migrację. Następnie uruchomiłem python manage.py migrate contact_enquiries I dostałem ten sam błąd jak powyżej.

To nie narzeka na żadną ze składni w moich modelach, dlatego jestem zdezorientowany. Oto moje modele i mam nadzieję, że rzuci to trochę światła.

from django.db import models 

class DocumentUpload(models.Model): 
    name = models.CharField(max_length="200") 

    document_upload = models.FileField(upload_to="uploads/documents") 


    def __unicode__(self): 
     return "%s" % self.name 

class DocumentRequest(models.Model): 
    name = models.CharField(max_length="200") 

    company = models.CharField(max_length="200") 

    job_title = models.CharField(max_length="200") 

    email = models.EmailField(max_length="200") 

    report = models.ManyToManyField(DocumentUpload) 

    def __unicode__(self): 
     return "%s" % self.name 

Jeśli potrzebujesz więcej informacji, proszę dać mi znać.

Dzięki!

Odpowiedz

35

Chociaż nie jestem w 100% pewny, to jest problem, istnieje duża szansa, że ​​sekwencja jest nieaktualna.

Czy wykonanie tego w Postgres rozwiązuje problem?

SELECT setval('django_content_type_id_seq', (SELECT MAX(id) FROM django_content_type)); 
+0

Rzeczywiście, w obliczu tego samego problemu. To samo rozwiązanie można osiągnąć za pomocą pgAdmin: przejdź do DB i schematu w lewym okienku (upewnij się, że Sekwencje są widoczne w Plik -> Preferencje -> Przeglądarka -> Węzły). Następnie wybierz Sekwencję odpowiedniej tabeli: kliknij prawym przyciskiem myszy -> Właściwości. Teraz ustaw prawidłową wartość w Definition -> Current value i Save it. Prawdopodobnie będziesz potrzebował ti zwiększyć wartość. Ustaw go na 1 wyżej niż maksymalna wartość PK widoczna w tabeli. – Davy

4

Zazwyczaj oznacza to, że sekwencja kluczy podstawowych nie jest zsynchronizowana. Mogło to być spowodowane przez złą migrację itp.
Aby to naprawić;
1. Uruchom dbshell
python manage.py dbshell
2. Znajdź obecną najwyższą wartość klucza podstawowego
select max(id) from django_content_type;
3. zmienić kolejność klucz podstawowy, aby teraz zacząć o wartości wyższej niż wartość znalezionego w kroku 2.
Więc zakładając, że wartość zwracana w kroku 2 zostało 290.780 następnie zmienić kolejność, aby rozpocząć na liczbę większą niż 290780
alter sequence django_content_type_id_seq restart with 295000;

Powiązane problemy