如何轻松地将 Django 应用程序从 mySQL 转换为 PostgreSQL?
有人这样做过吗?这是一个简单的过程吗?我们正在考虑切换到事务处理,因为 mysql 最近似乎“崩溃了”。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
有人这样做过吗?这是一个简单的过程吗?我们正在考虑切换到事务处理,因为 mysql 最近似乎“崩溃了”。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(8)
使用 Django 将 MySQL 数据库转换为 Postgres 数据库
首先在 json 固定装置中备份旧 Mysql 数据库的数据:
然后将 settings.DATABASES 切换为 postgres 设置。
在 Postgresql 中创建表:
现在删除迁移中自动生成的所有内容(django 内容类型、用户组等):
现在您可以安全地导入所有内容,并保持您的 pk 相同!
使用 Django==1.8 进行测试
Converting MySQL database to Postgres database with Django
First backup your data of the old Mysql database in json fixtures:
Then switch your settings.DATABASES to postgres settings.
Create the tables in Postgresql:
Now delete all the content that is automatically made in the migrate (django contenttypes, usergroups etc):
And now you can safely import everything, and keep your pk's the same!
Tested with Django==1.8
我刚刚使用这个工具来迁移内部应用程序,效果非常好。 https://github.com/maxlapshin/mysql2postgres
I just used this tool to migrate an internal app and it worked wonderfully. https://github.com/maxlapshin/mysql2postgres
您可以使用 Django 序列化器将数据从 MySQL 格式输出到 JSON,然后返回到 Postgres。互联网上有一些关于此的好文章:
轻松地将 Django 从 MySQL 迁移到 PostgreSQL
将 Django 站点移至 PostgreSQL:检查
You can do that using Django serializers to output the data from MySQL's format into JSON and then back into Postgres. There are some good artices on internet about that:
Migrating Django from MySQL to PostgreSQL the Easy Way
Move a Django site to PostgreSQL: check
我从来没有亲自做过,但它似乎是 dumpdata 和
I've never done it personally, but it seems like a combination of the dumpdata and loaddata options of manage.py would be able to solve your problem quite easily. That is, unless you have a lot of database-specific things living outside the ORM such as stored procedures.
我也没有做过。
我首先遵循这个 迁移指南,有一个 MySql 部分 应该照顾所有您的数据。然后django只需在设置中将mysql切换为postgre即可。我想应该没问题。
我在 stackoverflow 上发现了另一个问题,它应该有助于将 mysql 转换为 postgre 此处。
I've not done it either.
I'd first follow this migration guide, there is a MySql section which should take care of all your data. Then django just switch the mysql to postgre in the settings. I think that should be ok.
I found another question on stackoverflow which should help with the converting mysql to postgre here.
python manage.py dump.data>> data.json
在 postrgesql 中创建数据库和用户
运行syncdb用于创建表。
pythonsyncdb [--database=your_postrgesql_database] --noinput
创建没有数据的转储,删除所有表并加载转储。或者截断所有表(表 django_content_type 的数据可能不等于您的旧数据 - 这会导致许多错误)。在这一步中,我们需要 postgresql-db 中的空表。
当 postgresql-db 中有空表时,只需加载数据:
python manage.py loaddata data.json
并且很有趣!
python manage.py dump.data >> data.json
Create database and user in postrgesql
Run syncdb for create tables.
python syncdb [--database=your_postrgesql_database] --noinput
Create dump without data, drop all tables and load dump. Or truncate all tables (table django_content_type whith data which can be not equals your old data - it is way to many errors). At this step we need empty tables in postgresql-db.
When you have empty tables in postgresql-db just load your data:
python manage.py loaddata data.json
And be fun!
我编写了一个 Django 管理命令,将一个数据库复制到另一个数据库:
https://gist.github.com/mturilin/1ed9763ab4aa98516a7d
您需要在设置并使用此命令:
此命令的优点在于它递归地复制依赖对象。例如,如果模型有 2 个外键和两个多对多关系,它将首先复制其他对象以确保您不会出现外键冲突错误。
I wrote a Django management command that copies one database to another:
https://gist.github.com/mturilin/1ed9763ab4aa98516a7d
You need to add both database in the settings and use this command:
What cool about this command is that it recursively copy dependent objects. For example, if the model have 2 foreign keys and two Many-to-Many relationships, it will copy the other objects first to ensure you won't get foreign key violation error.
我刚刚完成了这个练习以及 michael- 提供的答案van-de-waeter 这里 非常完美。
但是,我想添加以下所需的步骤:
python manage.py shell
我还必须在数据 json 中附加一个方括号:
回显']'>> everything_else.json
I just went through this exercise and the answer provided by michael-van-de-waeter here is perfect.
However, I would like to add the following needed steps:
python manage.py shell
I had also to append a square bracket to the data json:
echo ']' >> everything_else.json