Комментарии 44
Это называется database (schema) migrations и в гугле легко находится десяток готовых решений, как тривиальных так и весьма навороченных.
И в них решены некоторые проблемы, с которыми вам вероятно придётся столкнуться при столь прямолинейном подходе.
И в них решены некоторые проблемы, с которыми вам вероятно придётся столкнуться при столь прямолинейном подходе.
+9
а откат как делать?
+6
если учесть, что операция отката не всегда возможна — то оптимальнее просто сохранить дамп до операции и если что вернуть его на место.
0
то есть как это не возможна? 0_0"
-1
расскажите, как бы вы реализовали операцию отката удаления поля или таблицы.
0
я его не буду удалять до тех пор, пока откат не потеряет смысла
0
в чём тогда смысл миграций, если они не выполняются?
0
а в чём смысл миграций, если их нельзя откатить?
0
смысл миграций в переезде со старой схемы на новую.
0
нет, их смысл — обеспечить актуальность структуры бд
0
актуальность это и есть смена схемы.
0
угу, как в прямую сторону, так и в обратную при откате
0
совершенно верно. через минуту после того как вы совершите удаление («я его не буду удалять до тех пор, пока откат не потеряет смысла „) вам потребуется таки вернуть всё как было ибо найден страшный-страшный баг.
ваши действия? :-)
ваши действия? :-)
0
если он пережил несколько релизов, значит он афайк не критичен.
0
баг исключительно в текущей версии продукта. в которой как раз и изменилась схема. в прошлой версии — его не было.
0
ну вот и что ты тогда будешь делать со своими необратимыми изменениями?
0
как я и говорил — просто будет возврат на бэкап. а вот что вы-то будете делать?
0
и потерять все данные пользователей, занесённые пока ты решал стоит ли откатываться?
а я не делаю необратимых изменений при релизе :-Р
а я не делаю необратимых изменений при релизе :-Р
0
ну всё, фиаско :-)
моя антагонистическая точка зрения таки проиграла. в качестве утешительного приза: назовите плиз стоящую реализацию для осуществления миграций на mysql (и ms sql) ;-)
моя антагонистическая точка зрения таки проиграла. в качестве утешительного приза: назовите плиз стоящую реализацию для осуществления миграций на mysql (и ms sql) ;-)
0
мы это в ручную делаем…
0
слишком рутинно и подвержено человеческим ошибкам, вон люди в первом комменте говорили о наличии клёвых инструментов, правда на коммент не ответили пока :-(
ps: как же мне дороги эти кружочки слева от постов, из-за которых мой ff просто по швам трещит при рендеринге страницы
ps: как же мне дороги эти кружочки слева от постов, из-за которых мой ff просто по швам трещит при рендеринге страницы
0
Не увидел в SQL коде транзакций… Процедура — атомарна?
ЗЫ: «Оперативно», говорите? А откуда тогда берутся топики про «как добавить колонку в много гигабайтную таблицу»?
ЗЫ: «Оперативно», говорите? А откуда тогда берутся топики про «как добавить колонку в много гигабайтную таблицу»?
+4
> дампы БД не нужны — приложение целиком находиться в репозитории
Это как? Или Вы про «начальное» состояние БД?
Это как? Или Вы про «начальное» состояние БД?
0
НЛО прилетело и опубликовало эту надпись здесь
Вместо подобных решений я использую проверку существования изменяемых/добавляемых полей в ALTER TABLE. Пример:
$db->sql_query(«select nocashe from `config`;») or $db->sql_query(«ALTER TABLE `config` ADD `nocashe` text NOT NULL;»);
Т.е. если поля «nocashe» в таблице «config» нет, оно будет добавлено.
С проверкой таблиц итак все давно известно: CREATE TABLE IF NOT EXISTS…
Для того, чтобы обновлять все устаревшие сайты, я использую один постепенно растущий скрипт, в который добавляю подобные команды по мере каких-либо изменений в БД. В итоге никакими средствами автоматизации пользоваться не приходится вообще.
$db->sql_query(«select nocashe from `config`;») or $db->sql_query(«ALTER TABLE `config` ADD `nocashe` text NOT NULL;»);
Т.е. если поля «nocashe» в таблице «config» нет, оно будет добавлено.
С проверкой таблиц итак все давно известно: CREATE TABLE IF NOT EXISTS…
Для того, чтобы обновлять все устаревшие сайты, я использую один постепенно растущий скрипт, в который добавляю подобные команды по мере каких-либо изменений в БД. В итоге никакими средствами автоматизации пользоваться не приходится вообще.
-1
Для меня самое удобный инструмент по решению подобных задач — SqlYog с встроенной функцией Schema Synchronization Tool
0
как и svn up на боевой копии — хороший способ отстрелить себе ногу в случае неаккуратного использования.
пункт два по нумерации невыполним, когда над проектом работает несколько разработчиков, собьётся очерёдность. дифф понадёжнее.
пункт два по нумерации невыполним, когда над проектом работает несколько разработчиков, собьётся очерёдность. дифф понадёжнее.
0
А как поступаете, если один разработчик шлет в репозиторий 0034.users_added_balance_column.sql, а второй 0034.users_added_saldo_column.sql?
+1
почти что rake db:migrate
0
Не совсем, конечно, для PHP, но все же.
0
Не вижу LOCK TABLES и UNLOCK TABLES.
Или не возникало такой необходимости?
Или не возникало такой необходимости?
+1
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Публикации
Изменить настройки темы
Обновление сайта, обновление схемы БД (MySQL)