Как вы готовите дельты SQL? вы вручную сохраняете каждый SQL-запрос, изменяющий схему, в дельта-папку, или у вас есть какой-то автоматический процесс сравнения?
Меня интересуют соглашения об управлении версиями схемы базы данных вместе с исходным кодом. Возможно, хук предварительной фиксации, который отличает схему?
Кроме того, какие существуют варианты различия дельт помимо DbDeploy?
Обновлено: увидев ответы, я хотел бы уточнить, что я знаком со стандартной схемой выполнения миграции базы данных с использованием дельт. У меня вопрос о создании самих дельт, желательно автоматически.
Кроме того, управление версиями предназначено для PHP и MySQL, если это имеет значение. (Никаких решений Ruby, пожалуйста).
Эта ссылка кажется пустой - она все еще существует?
Похоже, он переехал: github.com/mmatuson/SchemaSync


Видеть
Есть ли система контроля версий для изменения структуры базы данных?
Как мне изменить версию моей базы данных MS SQL в SVN?
и статья Джеффа
Получите вашу базу данных под контролем версий
Я чувствую твою боль и желаю лучшего ответа. Возможно, это ближе к тому, что вы искали.
Механизмы отслеживания изменений схемы БД
В общем, я считаю, что для этого нет адекватного, общепринятого решения, и я использую свой собственный в этой области.
Как вы можете понять из моего вопроса, я знаю концепцию дельт. Мой вопрос касается соглашений для их создания, желательно автоматически.
Думаю, тогда я раскрою свой собственный ...;)
Вы пробовали DBDiff: github.com/DBDiff/DBDiff? Это хорошо подходит для того, что вы ищете, @EranGalperin, поскольку он выполняет автоматические миграции как для схемы, так и для данных в SQL. Раскрытие Я разработчик!
Мы экспортируем данные в переносимый формат (используя нашу инструментальную цепочку), а затем импортируем их в новую схему. нет необходимости в дельта-SQL. Настоятельно рекомендуется.
Что это за переносимый формат? и как вы импортируете его в новую схему, применяя только отличия от предыдущей версии?
Вы можете взглянуть на другую похожую ветку: Как мне изменить версию моей базы данных MS SQL в SVN?.
Не управляю дельтами. Я вношу изменения в основную базу данных и имею инструмент, который создает сценарий сборки на основе XML на основе главной базы данных.
Когда приходит время обновить существующую базу данных, у меня есть программа, которая использует сценарий сборки на основе XML для создания новой базы данных и пустых таблиц. Затем я копирую данные из старой базы данных, используя INSERT INTO x SELECT FROM y, а затем применяю все индексы, ограничения и триггеры.
Новые таблицы, новые столбцы, удаленные столбцы обрабатываются автоматически, и с помощью нескольких небольших приемов для настройки процедуры копирования я могу обрабатывать переименование столбцов, изменение типа столбца и другие базовые рефакторинги.
Я бы не рекомендовал это решение для базы данных с огромным объемом данных, но я регулярно обновляю базу данных размером более 1 ГБ с 400 таблицами.
Это звучит несколько громоздко, особенно при работе с несколькими разработчиками. Кроме того, процесс сборки звучит сложно, и я хотел бы быть максимально простым.
Я признаю, что потребовалось время, чтобы все исправить, но теперь почти не требуется усилий для подготовки обновления и даже меньше для его выполнения. Кроме того, мне нравится то, что я могу вносить временные исправления, и это не влияет на процедуру обновления. Каждое обновление - это новая новая БД.
Вы не упомянули, какую СУБД вы используете, но если это MS SQL Server, Сравнение SQL Red-Gate был незаменим для нас при создании дельт между сценариями создания объектов.
Это для Mysql, я обновил свой вопрос
Меня тоже интересует эта тема.
Есть некоторые обсуждения этой темы в вики Django.
Интересно, что это похоже на CakePHP имеет встроенное управление версиями схемы с использованием только команды cake schema generate.
Из того, что я читал о решении для торта - это версионирование в очень простом смысле, однако у него нет возможности различать, поэтому оно бесполезно для меня.
Я использую базу данных Жар-птица для большей части разработки, и я использую для нее инструмент администрирования ПламяРобин. У него есть хорошая возможность регистрировать все изменения. Он может записывать все в один большой файл или один файл на каждое изменение базы данных. Я использую этот второй вариант, а затем сохраняю каждый сценарий в программе управления версиями - раньше я использовал Subversion, теперь я использую Git.
Я предполагаю, что вы можете найти какой-нибудь инструмент MySQL, который имеет ту же функцию ведения журнала, что и FlameRobin для Firebird.
В одной из таблиц базы данных я храню номер версии структуры базы данных, поэтому я могу легко обновить любую базу данных. Я также написал простой сценарий PHP, который выполняет эти сценарии SQL один за другим в любой целевой базе данных (путь к базе данных и имя пользователя / пароль указываются в командной строке).
Также есть возможность регистрировать все операторы DML (вставка, обновление, удаление), и я активирую это, изменяя некоторые «стандартные» данные, содержащиеся в каждой базе данных.
Я написал хороший технический документ о том, как я все это делаю в деталях. Вы можете скачать статью в формате .pdf вместе с демонстрационными PHP-скриптами с сайта здесь.
Я не из тех, кто играет в гудок, но я разработал внутреннее веб-приложение для отслеживания изменений в схемах базы данных и создания сценариев обновлений с поддержкой версий.
Этот инструмент называется Бразилия и теперь имеет открытый исходный код по лицензии MIT. Brazil основан на ruby / ruby on rails и поддерживает развертывание изменений в любой базе данных, которую поддерживает Рубин DBI (MySQL, ODBC, Oracle, Postgres, SQLite).
Планируется поддержка включения скриптов обновления в систему контроля версий.
Бразилия выглядит неплохо, жаль, что я использую в основном PHP. Вы когда-нибудь думали о переносе системы?
Я также разработал набор сценариев PHP, с помощью которых разработчики могут отправлять свои сценарии deltasql в центральный репозиторий.
В одной из таблиц базы данных (называемой TBSYNCHRONIZE) я храню номер версии последнего выполненного скрипта, поэтому я могу легко обновить любую базу данных с помощью веб-интерфейса или клиента, специально разработанного для Eclipse.
Веб-интерфейс позволяет управлять несколькими проектами. Он поддерживает также «филиалы» базы данных.
Вы можете протестировать приложение на http://www.gpu-grid.net/deltasql (если вы войдете в систему как admin с паролем testdbsync). Приложение с открытым исходным кодом, его можно скачать здесь: http://sourceforge.net/projects/deltasql
deltasql продуктивно используется в Швейцарии и Индии и популярен в Японии.
http://bitbucket.org/idler/mmp - инструмент управления версиями схемы для mysql, написанный на PHP
Несколько месяцев назад я искал инструмент для управления версиями схемы MySQL. Я нашел много полезных инструментов, таких как миграция Doctrine, миграция RoR, некоторые инструменты, написанные на Java и Python.
Но ни один из них не удовлетворил мои требования.
Мои требования:
Я начал писать свой инструмент миграции, и сегодня у меня есть бета-версия.
Пожалуйста, попробуйте, если вам интересна эта тема. Пожалуйста, присылайте мне будущие запросы и отчеты об ошибках.
Исходный код: bitbucket.org/idler/mmp/src Обзор на английском языке: bitbucket.org/idler/mmp/wiki/Home Обзор на русском: antonoff.info/development/mysql-migration-with-php-project
У вас также есть новый инструмент: DBV: stackoverflow.com/a/13837473/6309
Если вы все еще ищете варианты: взгляните на дизайнер neXtep. Это бесплатная среда разработки баз данных под лицензией GPL, основанная на концепции контроля версий. В среде вы всегда работаете с версионными сущностями и можете сосредоточиться на разработке модели данных. После завершения выпуска механизм генерации SQL, подключенный к системе контроля версий, может сгенерировать любую необходимую вам дельту между двумя версиями и при необходимости предложит вам некоторый механизм доставки.
Помимо прочего, вы можете синхронизировать и обратно синхронизировать свою базу данных во время разработки, создавать диаграммы модели данных, запрашивать свою базу данных с помощью интегрированных клиентов SQL и т. д.
Загляните в вики для получения дополнительной информации: http://www.nextep-softwares.com/wiki
В настоящее время он поддерживает Oracle, MySql и PostgreSql и находится на Java, поэтому продукт работает в Windows, Linux и Mac.
Я использую http://code.google.com/p/oracle-ddl2svn/
Я использую строгое управление версиями схемы базы данных (отслеживается в отдельной таблице). Сценарии хранятся в системе контроля версий, но все они проверяют текущую версию схемы перед внесением каких-либо изменений.
Вот полная реализация для SQL Server (при необходимости такое же решение можно разработать для MySQL): Как поддерживать версию схемы базы данных SQL Server
Я только что прочитал вашу статью. Вы все еще используете это или уже приняли готовое решение, такое как DBUp или ReadyRoll?
В настоящее время все мои проекты полагаются на Entity Framework Code-First, и я использую его миграции для версии базы данных. У меня есть решение из статьи в паре старых проектов, и я никогда его не заменял. В других проектах я использовал инструменты Redgate для управления схемой и миграциями.
Здорово, что вы пользователь Redgate! Если вы хотите использовать инструменты Redgate вместе с EF, это возможно: red-gate.com/blog/database-lifecycle-management/…
Обязательно попробую при следующей возможности. Он сослужил нам хорошую службу, но за это время я сменил команду и теперь экспериментирую с собственной поддержкой EF, прежде чем продвигать ее вперед.
Я удостоверяюсь, что изменения схемы всегда добавляются. Поэтому я не отбрасываю столбцы и таблицы, потому что это приведет к потере данных и их нельзя будет откатить позже. Таким образом, код, использующий базу данных, можно откатить без потери данных или функциональности.
У меня есть сценарий миграции, содержащий операторы, которые создают таблицы и столбцы, если они еще не существуют, и заполняют их данными.
Сценарий миграции запускается при каждом обновлении производственного кода и после новых установок.
Когда я хочу что-то отбросить, я делаю это, удаляя их из сценария установки базы данных и сценария миграции, поэтому эти устаревшие элементы схемы будут постепенно сокращаться в новых установках. С тем недостатком, что при новой установке невозможно перейти на более старую версию перед установкой.
И, конечно же, я выполняю DDL через эти сценарии, а не непосредственно в базе данных, чтобы все было синхронизировано.
После долгого исследования я выяснил, что есть некоторые сторонние инструменты или типы проектов Visual Studio, которые меня не устраивают, или просто блоги о теории, но без реализации. Итак, я внедрил рабочую систему, которая используется почти год, и объяснил здесь:
http://nalgorithm.com/2015/11/09/database-versioning-part-1/
в зависимости от интереса, продолжу писать дальше.
Привет, добро пожаловать в SO. Этот ответ на самом деле не полный, в основном он предоставляет только ссылку. Ответы только по ссылкам не самые лучшие: если ссылка когда-либо станет недействительной, ваш ответ станет бесполезным. Поэтому, пожалуйста, отредактируйте его и добавьте хотя бы краткое изложение того, что там можно найти, чтобы ваш ответ имел ценность независимо от ссылки. Спасибо!
Когда я попадаю в новую БД:
Сначала проверяю структуру:
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 | lessThanks to stackoverflow users I could write this quick script to find structure differences.
src : https://stackoverflow.com/a/8718572/4457531 & https://stackoverflow.com/a/26328331/4457531
На втором этапе я проверяю данные таблица за таблицей с помощью mysqldiff. Это немного архаично, но цикл php, основанный на данных information_schema, безусловно, работает
Для управления версиями я использую тот же способ, но я форматирую сценарий обновления SQL (для обновления или отката) с результатами сравнения и использую соглашение о номере версии (с некоторыми изменениями номер версии выглядит как ip-адрес).
initial version : 1.0.0
^ ^ ^
| | |
structure change: - | |
datas added: -------- |
datas updated: --------
Я использую schemasync для создания патча (и сценария отката). Они добавляются в репо SVN. Это не идеально, но мне подходит. Кроме того, с помощью schemasync довольно легко развернуть изменения схемы.