2012-01-17 103 views
4

我使用Django 1.2和1.3以及MySql后端。将Django数据库后端从MySql更改为PostgreSQL

一旦同时与南方迁移我的MySQL数据库时收到一条错误消息:

! Error found during real run of migration! Aborting. 

! Since you have a database that does not support running 
! schema-altering statements in transactions, we have had 
! to leave it in an interim state between migrations. 
... 
! The South developers regret this has happened, and would 
! like to gently persuade you to consider a slightly 
! easier-to-deal-with DBMS 

我在想,如果我的迁移数据库从MySQL到PostgreSQL可以防止此错误。其次,从MySql迁移到PostgreSQL将会更多地涉及到在MySql dbase上执行dumpdata,将设置更改为指向PostgreSQL和新后端的加载数据?

我看到了this stackoverflow的问题,但它谈到他的数据库太大。我不认为这将是我的数据库的情况。我的Django项目中没有任何自定义SQL命令。

+0

只是尽量在回答中给出的mysql2postgres http://stackoverflow.com/ a/8385094/540341 - 如果一切顺利,则需要几分钟时间。您可以在迁移之前备份您的数据库和配置以100%安全。 – filiprem 2012-01-17 14:22:58

+0

另一种选择是留在MySQL上,但改变表InnoDB引擎。见http://stackoverflow.com/questions/4834415/does-djangos-south-migration-tool-work-for-innodb – filiprem 2012-01-17 14:26:09

+0

@filiprem,谢谢,这可能有效。我感兴趣的是,如果专门迁移到PostgreSQL也会避免这种情况。我还有其他几个想要迁移的原因。我阅读了有关mysql2postgres的信息,如果简单的dumpdata/loaddata出现问题,它将是一个很好的回退。 – 2012-01-17 15:08:08

回答

5

我厌倦了看到这个错误使用南,是的,切换到PostgreSQL已经放逐它!

上面评论中提到的用Ruby编写的mysql2postgres应用程序并不适用于我(它会运行,输出一些细节到屏幕,但不会复制任何数据行,对我来说)。不知道为什么。但很高兴有这么工作得十分完美的它一个Python重写(对我来说,最终):
http://pypi.python.org/pypi/py-mysql2pgsql

我发现的唯一的疑难杂症是:

起初,我认为这将是最安全的设置在表PostgreSQL数据库通过syncdb,然后只迁移数据。我试过这个,但是这些表按字母顺序进行迁移,这违反了某些表的外键约束(行与表中尚未导入的行有关)。

我接下来尝试了一个结构+数据迁移。这迁移很好,但我后来在Django遇到了一些问题,特别是管理网站。似乎迁移脚本已经创建了一些与Django不同的表约束。

我解决了这个问题,通过黑客mysql2pgsql脚本来尊重yaml config only_tables属性中给出的表的顺序......然后执行syncdb +仅数据迁移。通过试验和错误,我对我的迁移进行排序,直到它们全部导入成功。

UPDATE:
对上述被录取了,所以你可以从主版本做到这一点,现在的黑客我拉请求:
https://github.com/philipsoutham/py-mysql2pgsql

+0

谢谢,这正是我需要的信息。我将尝试你的成功迁移路线。 – 2012-01-19 22:44:09

+0

我目前正在部署此解决方案。它的工作原理,只有目前遇到的问题是这样的:http://stackoverflow.com/questions/6466836/postgres-sequences-without-an-owned-by-attribute-do-not-return-an-id-in-django – 2012-04-02 19:00:33

相关问题