如何解决我在使用 South 时遇到的迁移错误?

Posted

技术标签:

【中文标题】如何解决我在使用 South 时遇到的迁移错误?【英文标题】:How do I fix a migration error I'm getting with South? 【发布时间】:2012-09-18 04:58:33 【问题描述】:

我尝试将以下模型中的字段从 CharField 更改为 ForeignKey,但在运行迁移时出现错误。我得到的错误是:

致命错误 - 以下 SQL 查询失败:CREATE INDEX "reserve_reviewbackup_fbfc09f1" ON "reserve_reviewbackup" ("user_id"); 错误是:索引reserve_reviewbackup_fbfc09f1 已经存在 !在实际运行迁移过程中发现错误!中止。

!由于您有一个不支持运行的数据库 !事务中的模式改变语句,我们有 !使其在迁移之间处于临时状态。

class Reviewbackup(models.Model):
    review = models.CharField('Review', max_length = 2000)
    user = models.CharField('Username', max_length =  200)
    rating = models.IntegerField(max_length=2, choices=RATING_OPTIONS)
    product = models.ForeignKey(Productbackup)
    def __unicode__(self):
        return self.review

user = models.ForeignKey(User, related_name='reviews')

【问题讨论】:

在同一版本中出现同样的错误(将字段类型从 CharField 更改为 ForeignKey 而不更改其名称),对我来说听起来像是一个错误。 (南 0.7.6) 为了完成与 South 的描述更改,我使用了两个步骤:1)第一次迁移,我更改了字段的类型和名称(名称设置为临时值) 2)我更改的第二次迁移字段的名称恢复为原始名称(临时名称丢弃)。当然,South 已经把我的 Sqlite DB 弄得无法修复了……让我们以此为一个很好的教训,在迁移之前始终转储所有 DB 内容:python manage.py dumpdata > savemyass.json 修改前后的代码可以写吗? 【参考方案1】:

我以前做过。只需从数据库管理员手动删除索引,一切正常。

【讨论】:

以上是关于如何解决我在使用 South 时遇到的迁移错误?的主要内容,如果未能解决你的问题,请参考以下文章

什么是 Django South GhostMigrations 异常以及如何调试它?

如何对 Django South“数据迁移”进行单元测试

django south 在多个数据库上

Django South:为多个应用程序创建架构迁移

South 在尝试迁移时引发 ValueError

如何在 Django 中使用 South 将数据从一个模型迁移到另一个模型?