~372572
в гостевой книге
Короче не стал ждать ночи и перелез на Постгрес уже сейчас.
Минутка девопса, кому интересно (все равно все отдыхают от футбола).
Лет пятнадцать назад я пробовал Постгрес, и минорные различия с MySQL по части собственно SQL решались обыкновенным флажком mysqldump --compatible=postgres. Так вот оказывается, те времена давно прошли. Теперь различия в SQL нельзя назвать просто кучкой диалектных деталей. Более того: разросся выводок приложений, которые обещают тебе бесшовную миграцию! Подозрительный знак, который как бы сообщает, что просто не будет.
Так и оказалось. В нашем случае не подошло просто ничего. Флажок compatible депрекейтнули, в pgloader валится консоль лиспа с текстом, что не хватает памяти, flyway замирает ни взад, ни вперед, короче все это мура, на которую я убил три вечера.
У нас как водится свой посконный путь, поэтому вот как я все сделал:
— Почистил схему от артефактов mysql: выбросил все collation и charset на уровне таблиц и полей, порезал атрибут size у полей text. Подход, когда сначала мы беремся за схему, а не за дамп, хорош тем, что схема — агностик, а вот дамп нет, и мудохаться там с диалектами SMALLINT/TINYINT вообще неохота.
— Поднял голый Постгрес локально.
— По этой обновленной схеме добавил структуру в Постгрес.
— Написал консольный таск, который обходит массив рельсовых классов (не таблиц!), берет у каждого его объекты и (на уровне рельсы, а не sql) вклеивает их в новую базу. Классы просто передаем в массиве с сортировкой от независимых к зависимым (то есть например сначала импортируем профили, а потом юзеров; сначала игры, а потом голы, и т.д.). Все валидации, все рестрикшны должны проходить как надо: мы же по-умному скармливаем классы, а не сырые таблицы. Прогон таска на всю базу занимает примерно 25 минут.
— Заказал свежайший дамп базы MySQL с прода, слил его с Васаби.
— Прогнал таск локально
— Сделал дамп уже Постгреса, залил его на Васаби
— На проде сделал голый Постгрес, с шелла прода слил базу с васаби, развернул его с pg_restore.
— Поправил все ENV-переменные у рельсы.
— Задеплоил с новыми настройками прода: что адаптер базы теперь постгрес.
С первого же раза все встало как влитое! Но теперь нашлась проблема: за те полчаса, что я гонял локальный таск, вы успели поставить 25 лайков и написать 4 поста. Нельзя их терять, дата юзеров — бесценна! Поэтому всовываем новые, но не вошедшие в первый дамп, данные из продовой консоли рельсы, там короче дело техники на 3 минуты.
Итог: подтянул знания нескольких консольных приблуд, НАКОНЕЦ-ТО можно юзать нормальные гуевые клиенты для Постгреса (а не мудацкий Sequel Ace), ну и вообще ПГ каеф, а MySQL фу.
Надеюсь, что и дальше ниче не навернется.
Становитесь программистами и девопсерами!