Django мигрируем с MySQL на PostgreSQL

Май 17th, 2014 § 0 comments

Уже “тыщу лет” ничего не писал. Времени нет, все время занимает кодинг и DotA (развеваю миф о том что пуляет только школота, ну или я еще не повзрослел). Активно проктикую Django последние несколько месяцев как стартовый проект пилю Heroes of the Storm во славу близов))) Опять к слову о взрослении, ну да ладно. Вообще раньше все было на олдскульном MySQL пока не словил легкий факап с юникодом. Думаю последний красный флажок, надо переходить на PostgreSQL. К слову на работе уже потихоньку переходим, вот и еще один повод. Встал вопрос как перенсти данные что уже были вбиты в MySQL об этом собственно и рассказ.

Первое что делаем ставим Постгрю и тут же первый подводный камень, не ставьте так

sudo apt-get install postgresql postgresql-contrib

Ибо хуйня – хуйня – хуйня выйдет!. Объясню почему, дело в том что пострег поставится, но не поднимется как сетевой сервер, он будет слушать Unix домейн сокет, это штука эмулирует сетевое взаимодействие, приэтом вся движуха происходит в рамках одной машины, один из unix way способов межпроцессорного взаимодействия (гуглить Unix domain socket). В итоге выполучете ошибку вида:

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Думаю оно вам не надо. Если уж вам повезло, а вам скорее всего повезло, то делаем следующее и ставим PostgreSQL заново.

sudo apt-get remove --purge postgresql-9.1(тут будет та версия что у тебя стоит)

Дальше делаем

sudo apt-get install postgresql-9.1 (или любая конкретная)

Весь фокус в том что нужно указать конкретную версию PostgreSQL и все встанет на свои места, а не ставить тут всякие абстрактные Постгресы )))

Идем дальше. Теперь нужно создать юзера и базу в которой будем работать. PostgreSQL при установки создает пользователья Postgres и он наделен всеми нужными правами. Логинемся подним и
создаем что нужно

sudo -u postgres psql postgres
CREATE USER Morgan WITH PASSWORD 'SuperStrongPasswordWichIcanRemember';
CREATE DATABASE "SuperSecret"  WITH OWNER = Morgan  ENCODING = 'UTF8'  LC_COLLATE = 'en_US.UTF-8'  LC_CTYPE = 'en_US.UTF-8' CONNECTION LIMIT = -1;
GRANT ALL PRIVILEGES ON DATABASE SuperSecret to Morgan;

Вот таким не хитрым способом у нас почит все готово, не забывайте точку с запятой в конце а то вошебства не будет. Что делать дальше, нужно выгрузить все данные из базы MySQL
на помощь приходит Django с его командой:

./manage.py dumpdata my_json_dump.json

Тут данные будут выгруженны из БД в файл в json формате, если база большая придется подождать.
Дальше идем в settings.py и меняе конекшен стринги (не путать с женскими трусиками) с MySQL на PostgresSQL (это расписывать не буду, а то выйдет совсем для идиотов, а ты же не такой
верно!?)

./manage.py syncdb
./manage.py migrate
./manage.py loaddata my_json_dump.json

Тут я думаю что ты правильный пацан и пользуешь South для управлением миграциями в БД, но если нет то тогда migrate делать незачем.
Ты все сделал так но в консоль выввалилась тьма ошибок что -то типа

An exception occurred while loading data: duplicate key value violates unique constraint

Нужно почистить таблицу django_contetn_types при синхре туда заливаются данные, а когода ты пытаешься залить данные посредством loaddata то делаешь это дважды, что не хорошо так
что делай следующее

./manage.py dbshell
TRUNCATE django_content_type CASCADE;

Далее просто

./manage.py loaddata my_json_dump.json

Теперь должно все заработать, пора ссать кипятком и хвалить Django за пару простых движений, у тебя PostrgeSQL и все данные и ты не потратил пол дня писюкая свои говно срипты для переноса.
Если у тебя все получилось значит я потратил этот часок не зря.

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Смотреть фильмы онлайн