Подтвердить что ты не робот

Как я могу получить свою базу данных под управлением версии с помощью Perl?

Я рассматривал варианты получения наших схем баз данных под контролем версий. Кажется, что у людей Ruby есть Rails Migrations, а у .NET есть несколько вариантов (например this, this и this). Как насчет Perl?

Я видел этот поток на PerlMonks, который не так много, хотя он упоминает DBIX:: Migration:: Каталоги. Кто-нибудь действительно использует этот модуль или какой-то другой модуль? Или вы откатываете свои собственные решения по миграции баз данных?

Безвозмездные подробности:

  • Мы не используем DBIx:: Class по большей части
  • Мы используем MySQL
  • Мы используем SVN
4b9b3361

Ответ 1

В POPFile мы используем наше собственное решение. Мы храним номер версии схемы в db, и если программа обнаруживает, что существует более новая схема, она будет соответствующим образом обновлять db. Это не совсем лучшая и самая интересная часть нашего кода.

Честно говоря, я не вижу преимущества использования DBIx:: Migration:: Directories, если вы еще не используете DBIx:: Class. Вы должны предоставить SQL и номера версий и дескриптор базы данных. Вы могли бы также предоставить немного больше кода, чтобы найти файл sql и передать его в базу данных.

Конечно, наличие схемы в управлении версиями - отличный бонус.

Ответ 2

На работе мы используем модифицированную версию DBIx:: Migration (у нее есть некоторые ограничения, например, не более 10 миграций), Затем у вас есть основная схема, которую вы сбросили из своей базы данных, а когда номер версии слишком низок, вы обновляете свою базу данных с помощью миграции из каталога схемы миграции.

Я также очень рекомендую Рефакторинг баз данных. Помимо всего прочего, он предоставит вам отличные методы безопасного управления миграциями таким образом, что если вам нужно откатиться, вы не потеряете данные (например, когда вы удалите столбец, который, по вашему мнению, вам не нужен).

Чтобы помочь в автоматических графиках устаревания, это говорит о том, что я написал Devel:: Deprecate, так что вам не нужно запоминать когда делать изъятия. Ваш код будет жаловаться на вас громко (и только при тестировании, а не в производстве).

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

Обновить. Перемотка вперед на несколько лет, и сегодня я рекомендую sqitch. Он разработан с нуля, чтобы обрабатывать случай размещения базы данных под контролем версий, не привязывая вас к определенному языку программирования или VCS.

Ответ 3

Один очень интересный проект, который, вероятно, немного молод, чтобы положиться, - это Адам Кеннеди ORLite::Migrate, который вдохновляет его на миграцию Rails. Он написал очень интересный журнал на сайте use.perl.org о своих планах, и я надеюсь следить за ним в будущем.

Похоже, что этот пакет работает только с SQLite в данный момент, но я думаю, что Адам планирует построить это, чтобы в будущем быть агностиком базы данных.

Ответ 4

Мы используем систему, аналогичную описанной Манни. Два больших недостатка:

  • Невозможно выполнить изменения схемы отката (как правило, это редко, не очень хорошо протестировано и сложно, так что при необходимости вручную это не очень важно IMO).

  • Использование последовательного номера версии - это боль при разработке в нескольких ветвях - поскольку вы используете SVN, это вряд ли будет проблемой, как если бы вы использовали git.: -)

Сценарий script, который я использую, находится здесь: database_update и там есть небольшой пример файла данных.

Ответ 5

Как насчет sqitch? Он рекламирует себя как "приложение для управления изменениями базы данных",

Ответ 6

Существует интересный модуль CPAN (Database::Migrator). Я использовал его и отлично работаю, чтобы обрабатывать миграцию вашего проекта.

Каждая миграция переходит в свой собственный каталог. Миграции применяются в отсортированном порядке, как правило, вы называете их, начиная с префикса номера. Каталог миграции может содержать файлы с SQL или Perl.