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 и все данные и ты не потратил пол дня писюкая свои говно срипты для переноса.
Если у тебя все получилось значит я потратил этот часок не зря.

Давно ничего не писал

Февраль 22nd, 2014 § 0 comments § Прямая ссылка

Давно ничего не писал, можно сказать что даже подзабил, но сейчас появляется новый стимул. Взялся за изучение Python Django буду выкладывать свои шишки что бы вы их сами не допускали. Наверное первое с чего начну эту разворачивание Python + Django на боевом сервере.

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