Как я могу легко преобразовать приложение Django из mySQL в PostgreSQL?

Кто-нибудь это сделал? Это простой процесс? Мы думаем переключиться на транзакции и потому, что в последнее время mysql "обходит".

Ответ 1

Я просто использовал этот инструмент для переноса внутреннего приложения, и он отлично работал. https://github.com/maxlapshin/mysql2postgres

Ответ 2

Преобразование базы данных MySQL в базу данных Postgres с помощью Django

Сначала создайте резервные копии данных старой базы данных Mysql в json-приборах:

$ 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

Ответ 4

Я никогда не делал этого лично, но это похоже на комбинацию dumpdata и loaddata параметры manage.py могли бы легко решить вашу проблему. То есть, если у вас нет большого количества объектов, относящихся к базе данных, живущих вне ORM, таких как хранимые процедуры.

Ответ 5

Я тоже этого не делал. Сначала я должен следовать этому руководству по миграции есть раздел MySql, который должен заботиться обо всех ваших данных. Затем django просто переключает mysql на postgre в настройках. Я думаю, это должно быть хорошо.

Я нашел еще один вопрос о stackoverflow, который должен помочь в преобразовании mysql в postgre здесь.

Ответ 6

  • python manage.py dump.data → data.json

  • Создайте базу данных и пользователя в postrgesql

  • Установите только что созданную базу данных в postrgesql в качестве базы данных по умолчанию в настройках django или используйте следующую команду param --database = your_postrgesql_database.
  • Запустите syncdb для создания таблиц.

    python syncdb [--database = your_postrgesql_database] --noinput

  • Создайте дамп без данных, отбросьте все таблицы и загрузите дамп. Или усечь все таблицы (таблица django_content_type с данными, которые не могут быть равны вашим старым данным - это способ для многих ошибок). На этом этапе нам понадобятся пустые таблицы в postgresql-db.

  • Когда у вас есть пустые таблицы в postgresql-db, просто загружайте свои данные:

    python manage.py loaddata data.json

И будь веселым!

Ответ 7

Я написал команду управления Django, которая копирует одну базу данных в другую: https://gist.github.com/mturilin/1ed9763ab4aa98516a7d

Вам нужно добавить обе базы данных в настройки и использовать эту команду:

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

Что круто об этой команде, так это то, что она рекурсивно копирует зависимые объекты. Например, если у модели есть 2 внешних ключа и два отношения "многие-ко-многим", они сначала копируют другие объекты, чтобы убедиться, что вы не получите ошибку нарушения внешнего ключа.