有没有人这样做过?这是一个简单的过程吗?我们正在考虑切换事务,因为mysql最近似乎在“走出去”。
有没有人这样做过?这是一个简单的过程吗?我们正在考虑切换事务,因为mysql最近似乎在“走出去”。
我刚刚使用这个工具来迁移内部应用程序,它运行得非常好。 https://github.com/maxlapshin/mysql2postgres
使用Django将MySQL数据库转换为Postgres数据库
首先备份json fixtures中旧的Mysql数据库的数据:
$ python manage.py dumpdata contenttypes --indent=4 --natural-foreign > contenttype.json
$ python manage.py dumpdata --exclude contenttypes --indent=4 --natural-foreign > everything_else.json
然后切换你的设置.DATABASES到postgres设置。
在Postgresql中创建表:
$ python manage.py migrate
现在删除在迁移中自动生成的所有内容(django contenttypes,usergroups等):
$ python manage.py sqlflush | ./manage.py dbshell
现在你可以安全地导入所有内容,并保持你的pk一样!
$ python manage.py loaddata contenttype.json
$ python manage.py loaddata everything_else.json
用Django == 1.8测试
您可以使用Django序列化程序将数据从MySQL的格式输出到JSON然后再返回到Postgres。互联网上有一些很好的艺术:
我从来没有亲自做过,但它似乎是一个组合 dumpdata 和 loaddata manage.py的选项可以很容易地解决您的问题。也就是说,除非你有很多特定于数据库的东西生活在ORM之外,比如存储过程。
我也没做过。 我先跟着这个 迁移指南,有一个MySql部分 这应该照顾你的所有数据。然后django只是在设置中将mysql切换到postgre。我认为应该没问题。
我在stackoverflow上发现了另一个问题,它应该有助于将mysql转换为postgre 这里。
python manage.py dump.data >> data.json
在postrgesql中创建数据库和用户
为create table运行syncdb。
python syncdb [--database = your_postrgesql_database] - noinput
创建没有数据的转储,删除所有表并加载转储。或截断所有表(表django_content_type whith数据,这些数据可能不等于您的旧数据 - 这是许多错误的方法)。在这一步,我们需要postgresql-db中的空表。
在postgresql-db中有空表时只需加载数据:
python manage.py loaddata data.json
好玩!
我写了一个Django管理命令,将一个数据库复制到另一个: https://gist.github.com/mturilin/1ed9763ab4aa98516a7d
您需要在设置中添加两个数据库并使用此命令:
./manage.py copy_db from_database to_database app1 app2 app3 --delete --ignore-errors
这个命令很酷的是它以递归方式复制依赖对象。例如,如果模型有2个外键和2个多对多关系,它将首先复制其他对象以确保不会出现外键冲突错误。