Как я могу получить мою базу данных под контролем версий с помощью Perl? - PullRequest
12 голосов
/ 04 февраля 2009

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

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

Бесплатные детали:

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

Ответы [ 6 ]

7 голосов
/ 05 февраля 2009

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

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

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

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

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

6 голосов
/ 04 февраля 2009

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

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

3 голосов
/ 05 сентября 2014

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

3 голосов
/ 05 февраля 2009

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

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

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

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

3 голосов
/ 04 февраля 2009

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

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

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

0 голосов
/ 05 сентября 2014

Есть интересный модуль CPAN ( База данных :: Мигратор ). Я использовал его и отлично работает, чтобы справиться с миграциями вашего проекта.

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

...