2013-10-02 29 views
13

Chạy vào một chút vấn đề, tôi nhận được thông báo lỗi ở trên khi tôi chạy 'python manage.py syncdb' Tôi đang làm việc trên khá cũ trang web. Nó đang chạy django 1.2.6 với một DB postgres.django.db.utils.IntegrityError: giá trị khóa trùng lặp vi phạm ràng buộc duy nhất "django_content_type_pkey"

Chạy không được cài đặt ở phía nam và tôi đã xoay xở để làm việc đó. Ran python manage.py schemamigration --initial contact_enquiries chạy tốt và yêu cầu tôi di chuyển. Sau đó tôi chạy python manage.py migrate contact_enquiries Tôi nhận được lỗi tương tự như trên.

Nó không complaing về bất kỳ cú pháp trong mô hình của tôi đó là lý do tại sao tôi bối rối. Dưới đây là các mô hình của tôi và hy vọng rằng sẽ làm sáng tỏ một số.

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 

Nếu bạn cần thêm thông tin, vui lòng cho tôi biết.

Cảm ơn!

Trả lời

35

Mặc dù tôi không chắc chắn 100% đây là vấn đề, nhưng có khả năng là trình tự của bạn đã lỗi thời.

Việc thực hiện điều này trong Postgres có giải quyết được vấn đề không?

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

Thật vậy, phải đối mặt với cùng một vấn đề. Cùng một giải pháp có thể đạt được thông qua pgAdmin: duyệt đến DB và lược đồ trong khung bên trái (đảm bảo Sequences được hiển thị trong File -> Preferences -> Browser -> Nodes). Sau đó chọn Trình tự của bảng có liên quan: nhấp chuột phải -> Thuộc tính. Bây giờ đặt giá trị đúng trong Định nghĩa -> Giá trị hiện tại và Lưu nó. Có lẽ bạn sẽ cần ti tăng giá trị. Làm cho nó cao hơn giá trị PK tối đa được nhìn thấy trong bảng. – Davy

4

Điều này thường có nghĩa là chuỗi khóa chính của bạn đã không đồng bộ. Điều này có thể do sự di cư xấu, vv ..
Để khắc phục điều này;
1. Khởi động dbshell
python manage.py dbshell
2. Tìm giá trị cao nhất hiện tại của chính chủ chốt
select max(id) from django_content_type;
3. Thay đổi trình tự khóa chính đến nay bắt đầu tại một giá trị cao hơn giá trị được tìm thấy trong bước 2.
vì vậy, giả sử giá trị trả về trong bước 2 được 290.780 sau đó thay đổi thứ tự để bắt đầu tại một số lớn hơn 290780
alter sequence django_content_type_id_seq restart with 295000;

Các vấn đề liên quan