2013-10-02 120 views
13

進入一個問題,我得到上述錯誤信息,當我運行'python manage.py syncdb'我正在一個相當老現場。它使用postgres DB運行django 1.2.6。django.db.utils.IntegrityError:重複鍵值違反唯一約束「django_content_type_pkey」

運行沒有南安裝,我設法得到那個工作。 Ran python manage.py schemamigration --initial contact_enquiries哪些運行良好,並要求我遷移。然後我跑python manage.py migrate contact_enquiries然後我得到了與上面相同的錯誤。

它不會對我的模型中的任何語法感到厭煩,這就是爲什麼我很困惑。這裏是我的模型,希望這會帶來一些亮點。

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 

如果您需要了解更多信息,請告訴我。

謝謝!

回答

35

儘管我不是100%確定這是問題,但您的序列很可能已過時。

在Postgres中執行此操作是否可以解決問題?

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

事實上開始,面臨着同樣的問題。通過pgAdmin可以實現相同的解決方案:瀏覽左窗格中的數據庫和模式(確保序列在文件 - >首選項 - >瀏覽器 - >節點中可見)。然後選擇相關表的序列:右鍵單擊 - >屬性。現在在定義 - >當前值中設置正確的值並保存。可能你需要增加價值。使其高於表中所示的最大PK值。 – Davy

4

這通常意味着您的主鍵序列已經不同步。這可能是由於遷移不良等原因造成的。
要解決此問題;
1.啓動dbshel​​l
python manage.py dbshell
2.找到主鍵
select max(id) from django_content_type;
3.更改主鍵序列的當前最高值到現在開始以比在步驟2中找到的值高的值。
因此,假設在步驟2中返回的值是290780然後改變序列在數大於290780
alter sequence django_content_type_id_seq restart with 295000;

相關問題