当前位置: 首页 > 知识库问答 >
问题:

django.db.utils。IntegrityError:重复的键值违反了唯一约束“django_content_type_pkey”

谷梁驰
2023-03-14

遇到了一点问题,当我运行'pythonmanage.pysyncdb'时,我收到了上述错误消息,我正在一个相当旧的站点上工作。它'运行带有postgres DB的django 1.2.6。

运行没有安装南,我设法让它工作。运行pythonmanage.py模式迁移-初始contact_enquiries运行良好并要求我迁移。然后我运行pythonmanage.py迁移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

如果你需要更多信息,请告诉我。

谢啦!

共有3个答案

杨曜瑞
2023-03-14

这意味着您的数据库中的序列已过时(之前不正确的迁移或不同版本代码之间的跳转导致以混乱的顺序应用迁移可能会导致这种损坏状态)。要快速解决此问题,您可以手动更新数据库中的值。

python manage.py dbshell

检查下表的当前值

SELECT last_value FROM django_migrations_id_seq;
SELECT last_value FROM django_content_type_id_seq;

然后用下面的命令更新它们(任何大于上述输出值的正常值)。通常,第一个命令就足够了,但如果仍然出现键值违反唯一约束“django_content_type_pkey”的错误,则还需要运行第二个命令(可能需要根据数据库状态更改auth_permission_id_seq)

ALTER SEQUENCE django_migrations_id_seq RESTART WITH {value_greater_than_last_value};
ALTER SEQUENCE django_content_type_id_seq RESTART WITH {value_greater_than_last_value};

即使在这之后,你还是会得到错误。你用

SELECT last_value FROM auth_permission_id_seq;

增加值1

ALTER SEQUENCE auth_permission_id_seq RESTART WITH {value_greater_than_last_value};
长孙瑞
2023-03-14

这通常意味着您的主键序列已不同步。这可能是由不良迁移等引起的。
要解决此问题;
1. 启动数据库外壳
蟒蛇 manage.py 数据库外壳
2.找到主键的当前最大值
从django_content_type中选择max(id);
3. 将主键序列更改为现在从高于步骤 2 中找到的值的值开始。
因此,假设步骤2中返回的值为290780,然后更改序列以大于290780的数字开始
,django_content_type_id_seq以295000重新启动;

阙奇思
2023-03-14

虽然我不是100%确定这是问题所在,但很有可能你的序列已经过时了。

在Postgres中执行这个命令能解决问题吗?

SELECT setval('django_content_type_id_seq', (SELECT MAX(id) FROM django_content_type));
 类似资料:
  • 我有一个Django模型,其定义类似于以下内容: 起初,约束并不存在;我刚刚添加了它,并运行了。这导致了以下迁移(): 然而,当我尝试< code > python manage . py migrate 时,我得到以下错误: django.db.utils.Integrity错误:重复的键值违反了唯一约束“django_migrations_pkey”详细信息:键 (id)=(326) 已存在。

  • 我在django应用程序中创建了一个模型,并从pgadmin将数据填充到表中,但现在当我试图从应用程序创建记录时,它抛出了这个完整性错误: 重复的键值违反了唯一约束“packsapp_foo_pkey” 详细信息:键(id)=(4)已经存在。 这是models.py 我是否总是必须从应用程序本身插入数据? Views.py

  • 问题内容: 我正在跟着我先前提出的一个问题,在这个问题中,我试图寻求从愚蠢/编写不佳的mysql查询到postgresql的转换。我相信我成功了。无论如何,我正在使用从mysql数据库手动移动到postgres数据库的数据。我正在使用如下查询: 我有理由相信这很好。但是,这导致了新问题。尝试提交时,我从django收到一条错误,指出: 我已经看过这里发布的一些回复,但是我还没有找到解决我的问题的方

  • 我必须交换同一表的不同行的属性。 有一列“reference_id”在 DB 中具有唯一的约束。 代码: A 级- B级- 异常跟踪:

  • 我有一个笑话模型: 现在,当我试图迁移最后一行时,我得到了错误。基本上,我想将一个用户链接到Joke对象,因为我已经有了一个数据库,所以我希望默认值为1,这是管理员用户的id(我检查过了...).Makemigrations工作正常,但是当我尝试迁移时,我得到了这个: 我真的不明白怎么了。有什么想法吗?