2011-02-11 68 views
11

有没有人这样做?这是一个简单的过程吗?我们正在考虑切换事务,因为最近mysql似乎正在“退出”。如何轻松将Django应用程序从mySQL转换为PostgreSQL?

+0

1)MySQL的支持事务处理(InnoDB的)2)是什么让你觉得MySQL是 “crapping出” 了吗? – 2011-02-11 01:13:15

+0

因为现在我们刚刚开始听到这些错误的声音:OperationalError:(1205,'Lock超时超时;尝试重新启动事务')另外,在Django中使用South有时会在没有真正事务的情况下受到伤害。 – 2011-02-11 14:43:28

+1

MySQL不支持模式事务 - 这可能会导致大量令人头痛的迁移 – yarbelk 2013-02-18 05:20:27

回答

1

我从来没有亲自做过,但它看起来像dumpdataloaddata的组合,manage.py的选项将能够很容易地解决您的问题。也就是说,除非你有很多数据库特定的东西存在于ORM之外,比如存储过程。

0

我还没有做过。 我首先关注这个migration guide, there is a MySql section这应该照顾所有的数据。然后django只需在设置中将mysql切换到postgre。我认为这应该没问题。

我发现了另一个关于stackoverflow的问题,它应该有助于将mysql转换为postgre here

0
  1. 蟒蛇manage.py dump.data >> data.json

  2. 在postrgesql创建数据库和用户

  3. 在django设置中将您刚创建的数据库设置为默认数据库中的postrgesql,或者使用param --datab ase = your_postrgesql_database下一步
  4. 运行syncdb以创建表。

    蟒执行syncdb [--database = your_postrgesql_database] --noinput

  5. 没有数据创建转储,丢弃所有表和负载突降。或截断所有表(表django_content_type whith数据可能不等于您的旧数据 - 这是很多错误的方式)。在这一步,我们需要postgresql-db中的空表。

  6. 当你在空表PostgreSQL的分贝只是加载数据:

    蟒蛇manage.py loaddata data.json

而且很有趣!

0

我写了复制一个数据库到另一个Django的管理命令: https://gist.github.com/mturilin/1ed9763ab4aa98516a7d

您需要在设置中添加数据库和使用这个命令:

./manage.py copy_db from_database to_database app1 app2 app3 --delete --ignore-errors 

什么酷的这个命令它递归复制依赖对象。例如,如果模型有两个外键和两个多对多关系,它将首先复制其他对象以确保您不会收到外键违例错误。

9

Django的

首先备份您的JSON灯具老Mysql数据库的数据转换MySQL数据库Postgres数据库:

$ python manage.py dumpdata contenttypes --indent=4 --natural-foreign > contenttype.json 
$ python manage.py dumpdata --exclude contenttypes --indent=4 --natural-foreign > everything_else.json 

然后你settings.DATABASES切换到Postgres的设置。

PostgreSQL中创建表:

$ python manage.py migrate 

现在删除所有被自动迁移作出(Django的CONTENTTYPES,用户组等)内容:

$ python manage.py sqlflush | ./manage.py dbshell 

,现在你可以放心地进口一切,并保持你的PK是一样的!

$ python manage.py loaddata contenttype.json 
$ python manage.py loaddata everything_else.json 

测试和Django == 1.8

相关问题