Pull to refresh

Миграция с mysql на postgresql

Reading time 1 min
Views 40K
Привет уважаемому сообществу!

В какой-то момент времени встала потребность перенести базу приложения на 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 — все запускается без ошибок. Теперь настала пора оптимизации.

Надеюсь это описание поможет столкнувшимся с похожей проблемой.
Tags:
Hubs:
+10
Comments 13
Comments Comments 13

Articles