В какой-то момент времени встала потребность перенести базу приложения на django с mysql на postgresql. Первые два захода на эту проблему были неудачными, но позволили разобраться с целостностью данных, искоренить проблемы для manage.py syncdb
и manage.py migrate
.
На первом заходе мы попытались перенести базу через конвертацию sql-простыни в диалект postgresql.
На втором заходе мы попытались перенести через ./manage.py dumpdata
, но постоянно вылезали ошибки с ключами, невалидными данными (в базе было много ручных правок).
Между вторым и третьим заходом прошло много времени, и последние гугление по проблеме навело меня на эту статью. Морально я был уже готов анализировать и разбирать построчно портянки sql/yml весом под гигабайт, были заготовки для этого процесса… и все же я решил попробовать и повестись на простоту процесса.
Ну и пошло-поехло (все выполнялось в virtualenv, в postgresql была создана пустая база):
$ pip install py-mysql2pgsql $ py-mysql2pgsql No configuration file found. A new file has been initialized at: mysql2pgsql.yml Please review the configuration and retry... $ vim mysql2pgsql.yml $ py-mysql2pgsql -v -f mysql2pgsql.yml
Дальше минут 5 ожидания (все делалось в виртуалке, с не очень продвинутой конфигурацией). Пару раз вылетали, с ошибкой ОШИБКА: нулевое значение в колонке "created" нарушает ограничение NOT NULL
, в моем случае это можно было решить удалением записи в мускульной таблице.
После проверяем с новой конфигурацией БД: manage.py run_gunicorn
— все запускается без ошибок. Теперь настала пора оптимизации.
Надеюсь это описание поможет столкнувшимся с похожей проблемой.
ссылка на оригинал статьи http://habrahabr.ru/post/198366/
Добавить комментарий