Как вам версия схемы базы данных?
Как вы готовите свои дельты SQL? вы вручную сохраняете каждый изменяющий схему SQL в Дельта-папку или у вас есть какой-то автоматизированный процесс дифференцирования?
меня интересуют соглашения для управления версиями схемы базы данных вместе с исходным кодом. Возможно, крючок предварительной фиксации, который отличает схему?
кроме того, какие варианты различения дельт существуют помимо DbDeploy?
EDIT: видя ответы, которые я хотел бы чтобы уточнить, что я знаком со стандартной схемой для запуска миграции базы данных с использованием дельт. Мой вопрос заключается в создании самих дельт, желательно автоматически.
кроме того, версия предназначена для PHP и MySQL, если это имеет значение. (Никаких рубиновых решений, пожалуйста).
17 ответов:
посмотреть
есть системы контроля версий для изменения структуры базы данных?
как мне версировать мою базу данных MS SQL в SVN?
и статья Джеффа
Получить Базу Данных Под Контролем Версий
Я чувствую твою боль, и я хочу, чтобы был лучший ответ. Это может быть ближе к тому, что вы искали.
механизмы отслеживания схемы БД изменения
вообще, я чувствую, что нет адекватного, принятого решения для этого, и я катаю свой собственный в этой области.
вы можете взглянуть на другой, похожие темы: Как мне версировать мою базу данных MS SQL в SVN?.
Если вы все еще ищете варианты : посмотрите на neXtep designer. Это бесплатная среда разработки баз данных GPL, основанная на концепциях управления версиями. В среде вы всегда работаете с версионными сущностями и можете сосредоточиться на разработке модели данных. После того, как выпуск будет выполнен, механизм генерации SQL, подключенный к системе управления версиями, может генерировать любую дельту, которая вам нужна между двумя версиями, и предложит вам некоторый механизм доставки, если вам нужно.
среди кроме того, вы можете синхронизировать и реверсивно синхронизировать свою базу данных во время разработки, создавать диаграммы моделей данных, запрашивать базу данных с помощью интегрированных клиентов SQL и т. д.
посмотреть в вики для получения дополнительной информации : http://www.nextep-softwares.com/wiki
в настоящее время он поддерживает Oracle, MySql и PostgreSql и находится в java, поэтому продукт работает на windows, linux и mac.
Я не управляю дельт. Я делаю изменения в базе данных master и имею инструмент, который создает сценарий сборки на основе XML на основе базы данных master.
когда приходит время обновить существующую базу данных у меня есть программа, которая использует сценарий сборки на основе XML для создания новой базы данных и голых таблиц. Затем я копирую данные из старой базы данных, используя INSERT INTO x SELECT FROM y, а затем применяю все индексы, ограничения и триггеры.
новые столы, новые столбцы, удаленные столбцы все обрабатываются автоматически и с помощью нескольких небольших трюков для настройки процедуры копирования я могу обрабатывать переименования столбцов, изменения типа столбцов и другие основные рефакторинги.
Я бы не рекомендовал это решение для базы данных с огромным количеством данных, но я регулярно обновляю базу данных, которая превышает 1 ГБ С 400 таблицами.
вы не упомянули, какие СУБД вы используете, но если это MS SQL Server, Red-Gate SQL Compare был незаменим для нас в создании дельт между сценариями создания объектов.
Я не один, чтобы гудеть свой собственный рог, но я разработал внутреннее веб-приложение для отслеживания изменений в схемах баз данных и создания сценариев обновления версий.
этот инструмент называется Бразилия и теперь с открытым исходным кодом под лицензией MIT. Бразилия ruby / ruby on rails основана и поддерживает развертывание изменений в любой базе данных, которая Ruby DBI поддержка (MySQL, ODBC, Oracle, Postgres, SQLite).
поддержка установки сценариев обновления в систему управления версиями спланированный.
http://bitbucket.org/idler/mmp - инструмент управления версиями схемы для mysql, написанный на PHP
Я удостоверяюсь, что изменения схемы всегда аддитивны. Поэтому я не отбрасываю столбцы и таблицы, потому что это приведет к сжатию данных и не может быть откатано позже. Таким образом, код, использующий базу данных, может быть откатан без потери данных или функциональных возможностей.
У меня есть сценарий миграции, который содержит инструкции, которые создают таблицы и столбцы, если они еще не существуют, и заполняют их данными.
сценарий миграции выполняется при каждом обновлении производственного кода и после новых установок.
когда я хотел бы что-то бросить, я делаю это, удаляя их из сценария установки базы данных и сценария миграции, поэтому эти устаревшие элементы схемы будут постепенно поэтапно устраняться в новых установках. С недостатком, что новые установки не могут перейти на более старую версию до установки.
и, конечно, я выполняю DDLs через эти скрипты и никогда непосредственно в базе данных, чтобы держать вещи в синхронизации.
мы экспортируем данные в портативный формат (с помощью утилит), а затем импортировать его в новую схему. нет необходимости в Дельта-SQL. Настоятельно рекомендуемый.
Я использую Жар база данных для большинства разработок и я использую FlameRobin инструмент администрирования для него. Он имеет хороший вариант для регистрации всех изменений. Он может записывать все в один большой файл или один файл на изменение базы данных. Я использую этот второй вариант, а затем сохраняю каждый скрипт в программе управления версиями - раньше я использовал Subversion, теперь я использую Git.
Я предполагаю, что вы можете найти какой-то инструмент MySQL, который имеет ту же функцию ведения журнала, что и FlameRobin Субд firebird.
в одной из таблиц базы данных, я храню номер версии структуры базы данных, поэтому я могу легко обновить все базы данных. Я также написал простой PHP-скрипт, который выполняет эти SQL-скрипты один за другим в любой целевой базе данных (путь к базе данных и имя пользователя/пароль предоставляются в командной строке).
также есть возможность регистрировать все операторы DML (insert, update delete), и я активирую это при изменении некоторых данных по умолчанию, которые каждый база данных содержит.
Я написал хорошую белую бумагу о том, как я делаю все это в деталях. Вы можете скачать сочинение .формат pdf вместе с демонстрационными PHP скриптами от здесь.
Я также разработал набор PHP-скриптов, где разработчики могут отправлять свои скрипты deltasql в центральный репозиторий.
в одной из таблиц базы данных (называемой TBSYNCHRONIZE) я сохраняю номер версии последнего выполненного скрипта, поэтому я могу легко обновить любую базу данных с помощью веб-интерфейса или клиента, разработанного специально для Eclipse.
веб-интерфейс позволяет управлять несколькими проектами. Он поддерживает также базы данных "филиалы".
вы можете проверьте приложение на http://www.gpu-grid.net/deltasql (Если вы входите в систему как администратор с паролем testdbsync). Приложение с открытым исходным кодом и может быть загружен здесь: http://sourceforge.net/projects/deltasql
deltasql используется продуктивно в Швейцарии и Индии, и популярен в Японии.
несколько месяцев назад я искал инструмент для управления версиями схемы MySQL. Я нашел много полезных инструментов, таких как миграция доктрины, миграция RoR, некоторые инструменты, написанные на Java и Python.
но никто из них не был удовлетворен моими требованиями.
мои требования:
- нет требований, исключить PHP и MySQL
- нет файлов конфигурации схемы, как схемы.yml в доктрине
- возможность читать текущую схему из подключения и создавать новые сценарий миграции, чем представляют идентичную схему в других установках приложения.
Я начал писать мой инструмент миграции, и сегодня у меня есть бета-версия.
пожалуйста, попробуйте его, если у вас есть интерес к этой теме. Пожалуйста, пришлите мне будущие запросы и багрепорты.
исходный код: bitbucket.org/idler/mmp/src Обзор на английском языке: bitbucket.org/idler/mmp/wiki/Home Обзор на русском языке: antonoff.info/development/mysql-migration-with-php-project
Я использую http://code.google.com/p/oracle-ddl2svn/
меня тоже интересует эта тема.
здесь некоторые обсуждения на эту тему в Django wiki.
интересно, это выглядит как CakePHP имеет встроенную схему управления версиями через просто .
Для MySQL
когда я приземляюсь на новую БД:
во-первых, я проверяю структуру:
mysqldump --no-data --skip-comments --skip-extended-insert -h __DB_HOSTNAME__ -u __DB_USERNAME__ -p __DB1_NAME__ | sed 's/ AUTO_INCREMENT=[0-9]*//g' > FILENAME_1.sql mysqldump --no-data --skip-comments --skip-extended-insert -h __DB_HOSTNAME__ -u __DB_USERNAME__ -p __DB2_NAME__ | sed 's/ AUTO_INCREMENT=[0-9]*//g' > FILENAME_2.sql diff FILENAME_1.sql FILENAME_2.sql > DIFF_FILENAME.txt cat DIFF_FILENAME.txt | lessблагодаря пользователям stackoverflow я мог бы написать этот быстрый скрипт, чтобы найти различия в структуре.
src:https://stackoverflow.com/a/8718572/4457531 & https://stackoverflow.com/a/26328331/4457531
на втором шаге я проверяю данные, таблица за таблицей с помощью
mysqldiff. Это немного архаично, но цикл php на основеinformation_schemaданные делают работу, конечнодля управления версиями я использую тот же способ, но я форматирую сценарий обновления SQL (для обновления или отката) с результатами diff, и я использую соглашение о номере версии (с несколькими модификациями номер версии выглядит как IP-адрес).
initial version : 1.0.0 ^ ^ ^ | | | structure change: - | | datas added: -------- | datas updated: --------
Я использую строгое управление версиями схемы базы данных (отслеживается в отдельной таблице). Сценарии хранятся в системе управления версиями, но все они проверяют текущую версию схемы перед внесением каких-либо изменений.
вот полная реализация для SQL Server (то же самое решение может быть разработано для MySQL, если это необходимо): как поддерживать версию схемы базы данных SQL Server
после долгого исследования я выяснил, что есть некоторые сторонние инструменты или типы проектов Visual Studio, которые меня не удовлетворяют, или просто блоги о теории, но без реализации. Поэтому я разработала систему, которая используется почти год, и объяснил здесь:
http://nalgorithm.com/2015/11/09/database-versioning-part-1/
в зависимости от интереса, продолжу писать дальше.
Comments