当前位置: 首页 > 面试题库 >

IntegrityError重复键值违反唯一约束-django / postgres

申屠浩歌
2023-03-14
问题内容

我正在跟着我先前提出的一个问题,在这个问题中,我试图寻求从愚蠢/编写不佳的mysql查询到postgresql的转换。我相信我成功了。无论如何,我正在使用从mysql数据库手动移动到postgres数据库的数据。我正在使用如下查询:

  """
  UPDATE krypdos_coderound cru

  set is_correct = case 
      when t.kv_values1 = t.kv_values2 then True 
      else False 
      end

  from 

  (select cr.id, 
    array_agg(
    case when kv1.code_round_id = cr.id 
    then kv1.option_id 
    else null end 
    ) as kv_values1,

    array_agg(
    case when kv2.code_round_id = cr_m.id 
    then kv2.option_id 
    else null end 
    ) as kv_values2

    from krypdos_coderound cr
     join krypdos_value kv1 on kv1.code_round_id = cr.id
     join krypdos_coderound cr_m 
       on cr_m.object_id=cr.object_id 
       and cr_m.content_type_id =cr.content_type_id 
     join krypdos_value kv2 on kv2.code_round_id = cr_m.id

   WHERE
     cr.is_master= False
     AND cr_m.is_master= True 
     AND cr.object_id=%s 
     AND cr.content_type_id=%s 

   GROUP BY cr.id  
  ) t

where t.id = cru.id
    """ % ( self.object_id, self.content_type.id)
  )

我有理由相信这很好。但是,这导致了新问题。尝试提交时,我从django收到一条错误,指出:

IntegrityError at (some url): 
duplicate key value violates unique constraint "krypdos_value_pkey"

我已经看过这里发布的一些回复,但是我还没有找到解决我的问题的方法(尽管相关的问题引起了一些有趣的阅读)。我在日志中看到了这一点,这很有趣,因为我从未明确调用insert- django必须处理它:

   STATEMENT:  INSERT INTO "krypdos_value" ("code_round_id", "variable_id", "option_id", "confidence", "freetext")
   VALUES (1105935, 11, 55, NULL, E'') 
   RETURNING "krypdos_value"."id"

但是,尝试运行该操作将导致重复键错误。实际的错误抛出在下面的代码中。

 # Delete current coding         CodeRound.objects.filter(object_id=o.id,content_type=object_type,is_master=True).delete()
  code_round = CodeRound(object_id=o.id,content_type=object_type,coded_by=request.user,comments=request.POST.get('_comments',None),is_master=True)
  code_round.save()
  for key in request.POST.keys():
    if key[0] != '_' or key != 'csrfmiddlewaretoken':
      options = request.POST.getlist(key)
      for option in options:
        Value(code_round=code_round,variable_id=key,option_id=option,confidence=request.POST.get('_confidence_'+key, None)).save()  #This is where it dies
  # Resave to set is_correct
  code_round.save()
  o.status = '3' 
  o.save(

我检查了序列等,它们似乎是有序的。在这一点上,我不确定该怎么做-我认为这是django的事情,但我不确定。任何反馈将不胜感激!


问题答案:

这发生在我身上-事实证明,你需要在Postgres中重新同步主键字段。关键是SQL语句:

SELECT setval('tablename_id_seq', (SELECT MAX(id) FROM tablename)+1)


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

  • 我在创建应用程序时遇到了这个问题。因此,每当我添加第一条评论时,问题都不会出现,但当我第二次尝试时,我会收到此错误: 重复的键值违反了唯一约束“tripplanner_discussion_author_id_key”详细信息:键 (author_id)=(1) 已存在。 我试图把放到 models.py,但它根本没有帮助。 models.py views.py 更新 当我登录到另一个用户时,一个

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

  • 遇到了一点问题,当我运行''时,我收到了上述错误消息,我正在一个相当旧的站点上工作。它'运行带有postgres DB的django 1.2.6。 运行没有安装南,我设法让它工作。运行pythonmanage.py模式迁移-初始contact_enquiries运行良好并要求我迁移。然后我运行pythonmanage.py迁移contact_enquiries然后我得到了与上述相同的错误。 它没有

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