ФорумСообществоФлейм → Школота размышляет о миграциях

Школота размышляет о миграциях

  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 16 ноября 2011 г. 11:58

    http://habrahabr.ru/blogs/symfony/97940/

    Ржачне ящитаю

    …Поэтому у меня нет необратимых миграций. Если я удаляю таблицу или столбец, в ролбеке я ее создаю. В данном случае удаленные данные уже не важны, главное — не нарушать цепочку миграций, так чтобы всегда можно было отойти к самому началу и вернуться в исходную точку.
    Поэтому я всегда пишу и тестирую откаты (–up; –down; –up). И бывает, что падают.


    интересно, какое обратное действие для drop table?
    зачем вообще делать ролбэки я не понимаю

    если они еще не обкатаны или вы накатываете на PROD, тогда их надо запускать по одной:
       ./symfony doctrine:migrate –up
    А все потому, что когда вы обновляетесь одним махом, например со 2 по 10 версию, и у вас падает какая-то миграция (причем неизвестно какая), то номер версии не обновится и останется 2, хотя реальный номер может быть 5. И тогда приходится находить упавшую миграцию, править номер версии в БД, чтобы откатиться и чинить миграцию.


    а что, доктрина не хранит выполненные миграции в самой базе? точнее, не записывает что миграция выполнена сразу после её выполнения? и ей что-то мешает выводить рантайм-лог - "миграция такая-то начата…закончена"?

    ну и т.д.:

    Обнуление миграций
    Меня заинтересовала эта идея — время от времени удалять все миграции, большая часть которых уже стала избыточной и требует много времени для создания тестового окружения. Можно снова написать первую миграцию для начального импорта и изменить номер миграции в БД.


    человеку делать нехуй
    Спустя 23 сек.
    ох бля. ну да, баян открыл
    Спустя 248 сек.
    ну и фкаментах прекрасное:


    Не знаю как в Symfony, но в Rails миграции делаются в транзакциях.


    особенно учитывая что транзакции при альтерах бесполезны чуть более чем полностью. по крайней мере в мускуле
    не всё полезно, что в swap полезло
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 16 ноября 2011 г. 12:39, спустя 40 минут 47 секунд

    интересно, какое обратное действие для drop table?
    зачем вообще делать ролбэки я не понимаю

    я тоже описываю роллбеки, при необходимости, но чаще делаю их pass


    # encoding: utf-8
    import datetime
    from south.db import db
    from south.v2 import SchemaMigration
    from django.db import models

    class Migration(SchemaMigration):

    def forwards(self, orm):
    db.start_transaction()
    db.rename_column('main_users', 'name', 'username')
    db.commit_transaction()

    def backwards(self, orm):
    db.start_transaction()
    db.rename_column('main_users', 'username', 'name')
    db.commit_transaction()




    # encoding: utf-8
    import datetime
    from south.db import db
    from south.v2 import SchemaMigration
    from django.db import models

    class Migration(SchemaMigration):

    no_dry_run = True

    def forwards(self, orm):
    orm['main.Users'].objects.filter(company="Bad company name").update(company=None)

    def backwards(self, orm):
    pass


    Спустя 57 сек.
    а что, доктрина не хранит выполненные миграции в самой базе? точнее, не записывает что миграция выполнена сразу после её выполнения? и ей что-то мешает выводить рантайм-лог - "миграция такая-то начата…закончена"?

    нда, станно, в South все путем с этим
    Спустя 113 сек.
    особенно учитывая что транзакции при альтерах бесполезны чуть более чем полностью. по крайней мере в мускуле

    В одной миграции не толкьо могут быть альтеры, но и миграция данных, так что лучше всетаки все в транзакцию обернуть
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 16 ноября 2011 г. 13:15, спустя 35 минут 58 секунд

    я тоже описываю роллбеки, при необходимости, но чаще делаю их pass

    я их описываю практически всегда, но ещё ни разу не использовал. если сделал ошибку проще накатить ещё один фикс

    В одной миграции не толкьо могут быть альтеры, но и миграция данных, так что лучше всетаки все в транзакцию обернуть

    часть миграции с данными можно прям в миграции в транзакцию и обернуть.
    не всё полезно, что в swap полезло
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 16 ноября 2011 г. 13:21, спустя 6 минут 22 секунды

    часть миграции с данными можно прям в миграции в транзакцию и обернуть.

    можно, но смысл в чем, проще запомнить как правило, если не знаешь нужны ли транзакции в миграции, то юзай их по дефолту, обрамляя всю миграцию
    а если точно уверен что не нужны, по каким-либо причинам, то не юзай
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz 16 ноября 2011 г. 13:44, спустя 22 минуты 33 секунды

    http://frozzeg.no-ip.info/1.wav?.mp3
    Спустя 77 сек.
    говно плеер блеать
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 16 ноября 2011 г. 14:08, спустя 24 минуты 35 секунд

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

    Например, составная миграция:

    alter table add `field`
    insert …
    insert …
    update …

    если обернуть её в транзакцию целиком, то на alter произойдёт её отмена (не помню, коммит или роллбэк), а транзакцию в транзакцию не завернёшь. надо или отделять альтеры от инсертов или делать так

    alter table add `field`
    BEGIN
    insert …
    insert …
    update …
    COMMIT
    не всё полезно, что в swap полезло
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 16 ноября 2011 г. 20:30, спустя 6 часов 21 минуту 19 секунд

    бля, я думал вы о иммиграции в другие страны…
    действительно, зачем то нужно школоте..

Пожалуйста, авторизуйтесь, чтобы написать комментарий!