切换到Postgres时使用Django的loaddata的IntegrityError

时间:2012-08-09 03:49:48

标签: python mysql django postgresql

我收到以下错误:

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")

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

问题可能是因为--natural关键字,如果您阅读有关dumpdata自然键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类。

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