【问题标题】:IntegrityError using Django's loaddata when switching to Postgres切换到 Postgres 时 Django 中的 IntegrityError 加载数据
【发布时间】:2012-08-06 06:31:51
【问题描述】:

我收到以下错误:

IntegrityError: duplicate key value violates unique constraint "users_userprofile_pkey"

我正在从 MySQL 迁移到 Postgres,因此我正在使用以下方法从 MySQL 数据库中转储数据:

python2.7 manage.py dumpdata --indent=4 --natural > dump.json

当我尝试将 dump.json 加载到 Postgresql 数据库时出现错误:

 python manage.py loaddata dump.json

我的用户/模型中有以下信号:

post_save.connect(create_user_profile, sender=User, dispatch_uid="user_create_profile")
post_save.connect(create_api_key, sender=User, dispatch_uid="user_create_api_key")

【问题讨论】:

    标签: python mysql django postgresql


    【解决方案1】:

    问题可能是因为--natural 关键字,如果您阅读有关转储数据自然键here 的文档,您会发现它存在一些适用于您的数据库迁移的问题。

    还有here,他们讨论了这个问题的解决方案,这似乎很有趣(也很乏味)。

    您始终可以尝试先添加不依赖于彼此的模型,以便在尝试创建另一个模型之前确保它们存在。即:

    如果你有这个模型:

    class Person(models.Model):
        first_name = models.CharField(max_length=100)
        last_name = models.CharField(max_length=100)
    
        birthdate = models.DateField()
    
        class Meta:
            unique_together = (('first_name', 'last_name'),)
    
    class Book(models.Model):
        name = models.CharField(max_length=100)
        author = models.ForeignKey(Person)
    

    然后先迁移 Person 类,再迁移 book 类。

    此外,如果您可以发布错误,那将非常有帮助(因为我可以更具体)但我很确定问题是主键问题

    【讨论】:

    • 我有一个依赖于 User 模型的 UserProfile。我如何只转储用户数据(Django 内置)。另外,当两个模型相互依赖时,顺序应该是什么?
    • 对于用户,您可以'./manage.py dumpdata auth' 之后只需转储您的用户配置文件。对于相互依赖的模型,您应该使用我提到的繁琐方法。迁移数据库并非易事。这是另一个可以帮助您的问题stackoverflow.com/questions/4964615/…
    【解决方案2】:

    我必须注释掉 post_save 信号,然后执行 loaddata。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-22
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 2013-07-25
      • 2017-12-22
      • 1970-01-01
      相关资源
      最近更新 更多