Уже “тыщу лет” ничего не писал. Времени нет, все время занимает кодинг и 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 и все данные и ты не потратил пол дня писюкая свои говно срипты для переноса.
Если у тебя все получилось значит я потратил этот часок не зря.
Оставить комментарий