Как вы редактируете свою схему базы данных?

Как вы готовите дельты SQL? вы вручную сохраняете каждый SQL-запрос, изменяющий схему, в дельта-папку, или у вас есть какой-то автоматический процесс сравнения?

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

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

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

Кроме того, управление версиями предназначено для PHP и MySQL, если это имеет значение. (Никаких решений Ruby, пожалуйста).

Я использую schemasync для создания патча (и сценария отката). Они добавляются в репо SVN. Это не идеально, но мне подходит. Кроме того, с помощью schemasync довольно легко развернуть изменения схемы.

Jay Sidri 06.07.2010 17:21

Эта ссылка кажется пустой - она ​​все еще существует?

jocull 30.09.2015 22:17

Похоже, он переехал: github.com/mmatuson/SchemaSync

Jay Sidri 01.10.2015 02:19
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
130
3
87 958
17
Перейти к ответу Данный вопрос помечен как решенный

Ответы 17

Ответ принят как подходящий

Видеть

Есть ли система контроля версий для изменения структуры базы данных?

Как мне изменить версию моей базы данных MS SQL в SVN?

и статья Джеффа

Получите вашу базу данных под контролем версий

Я чувствую твою боль и желаю лучшего ответа. Возможно, это ближе к тому, что вы искали.

Механизмы отслеживания изменений схемы БД

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

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

Eran Galperin 06.10.2008 22:10

Думаю, тогда я раскрою свой собственный ...;)

Eran Galperin 09.10.2008 09:09

Вы пробовали DBDiff: github.com/DBDiff/DBDiff? Это хорошо подходит для того, что вы ищете, @EranGalperin, поскольку он выполняет автоматические миграции как для схемы, так и для данных в SQL. Раскрытие Я разработчик!

Jasdeep Khalsa 21.05.2017 23:45

Мы экспортируем данные в переносимый формат (используя нашу инструментальную цепочку), а затем импортируем их в новую схему. нет необходимости в дельта-SQL. Настоятельно рекомендуется.

Что это за переносимый формат? и как вы импортируете его в новую схему, применяя только отличия от предыдущей версии?

Eran Galperin 06.10.2008 22:11

Вы можете взглянуть на другую похожую ветку: Как мне изменить версию моей базы данных MS SQL в SVN?.

Не управляю дельтами. Я вношу изменения в основную базу данных и имею инструмент, который создает сценарий сборки на основе XML на основе главной базы данных.

Когда приходит время обновить существующую базу данных, у меня есть программа, которая использует сценарий сборки на основе XML для создания новой базы данных и пустых таблиц. Затем я копирую данные из старой базы данных, используя INSERT INTO x SELECT FROM y, а затем применяю все индексы, ограничения и триггеры.

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

Я бы не рекомендовал это решение для базы данных с огромным объемом данных, но я регулярно обновляю базу данных размером более 1 ГБ с 400 таблицами.

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

Eran Galperin 06.10.2008 22:18

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

Darrel Miller 06.10.2008 22:25

Вы не упомянули, какую СУБД вы используете, но если это MS SQL Server, Сравнение SQL Red-Gate был незаменим для нас при создании дельт между сценариями создания объектов.

Это для Mysql, я обновил свой вопрос

Eran Galperin 06.10.2008 22:22

Меня тоже интересует эта тема.

Есть некоторые обсуждения этой темы в вики Django.

Интересно, что это похоже на CakePHP имеет встроенное управление версиями схемы с использованием только команды cake schema generate.

Из того, что я читал о решении для торта - это версионирование в очень простом смысле, однако у него нет возможности различать, поэтому оно бесполезно для меня.

Eran Galperin 07.10.2008 05:47

Я использую базу данных Жар-птица для большей части разработки, и я использую для нее инструмент администрирования ПламяРобин. У него есть хорошая возможность регистрировать все изменения. Он может записывать все в один большой файл или один файл на каждое изменение базы данных. Я использую этот второй вариант, а затем сохраняю каждый сценарий в программе управления версиями - раньше я использовал Subversion, теперь я использую Git.

Я предполагаю, что вы можете найти какой-нибудь инструмент MySQL, который имеет ту же функцию ведения журнала, что и FlameRobin для Firebird.

В одной из таблиц базы данных я храню номер версии структуры базы данных, поэтому я могу легко обновить любую базу данных. Я также написал простой сценарий PHP, который выполняет эти сценарии SQL один за другим в любой целевой базе данных (путь к базе данных и имя пользователя / пароль указываются в командной строке).

Также есть возможность регистрировать все операторы DML (вставка, обновление, удаление), и я активирую это, изменяя некоторые «стандартные» данные, содержащиеся в каждой базе данных.

Я написал хороший технический документ о том, как я все это делаю в деталях. Вы можете скачать статью в формате .pdf вместе с демонстрационными PHP-скриптами с сайта здесь.

Я не из тех, кто играет в гудок, но я разработал внутреннее веб-приложение для отслеживания изменений в схемах базы данных и создания сценариев обновлений с поддержкой версий.

Этот инструмент называется Бразилия и теперь имеет открытый исходный код по лицензии MIT. Brazil основан на ruby ​​/ ruby ​​on rails и поддерживает развертывание изменений в любой базе данных, которую поддерживает Рубин DBI (MySQL, ODBC, Oracle, Postgres, SQLite).

Планируется поддержка включения скриптов обновления в систему контроля версий.

Бразилия выглядит неплохо, жаль, что я использую в основном PHP. Вы когда-нибудь думали о переносе системы?

Eran Galperin 01.01.2009 23:26

Я также разработал набор сценариев 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.

Но ни один из них не удовлетворил мои требования.

Мои требования:

  1. Нет требований, кроме PHP и MySQL
  2. Нет файлов конфигурации схемы, таких как schema.yml в Doctrine.
  3. Возможность читать текущую схему из соединения и создавать новый сценарий миграции, чем представлять идентичную схему в других установках приложения.

Я начал писать свой инструмент миграции, и сегодня у меня есть бета-версия.

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

Исходный код: 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

VonC 12.12.2012 14:16

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

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

Загляните в вики для получения дополнительной информации: http://www.nextep-softwares.com/wiki

В настоящее время он поддерживает Oracle, MySql и PostgreSql и находится на Java, поэтому продукт работает в Windows, Linux и Mac.

Я использую строгое управление версиями схемы базы данных (отслеживается в отдельной таблице). Сценарии хранятся в системе контроля версий, но все они проверяют текущую версию схемы перед внесением каких-либо изменений.

Вот полная реализация для SQL Server (при необходимости такое же решение можно разработать для MySQL): Как поддерживать версию схемы базы данных SQL Server

Я только что прочитал вашу статью. Вы все еще используете это или уже приняли готовое решение, такое как DBUp или ReadyRoll?

David Atkinson 29.09.2016 12:22

В настоящее время все мои проекты полагаются на Entity Framework Code-First, и я использую его миграции для версии базы данных. У меня есть решение из статьи в паре старых проектов, и я никогда его не заменял. В других проектах я использовал инструменты Redgate для управления схемой и миграциями.

Zoran Horvat 29.09.2016 12:30

Здорово, что вы пользователь Redgate! Если вы хотите использовать инструменты Redgate вместе с EF, это возможно: red-gate.com/blog/database-lifecycle-management/…

David Atkinson 29.09.2016 12:37

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

Zoran Horvat 29.09.2016 12:51

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

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

Сценарий миграции запускается при каждом обновлении производственного кода и после новых установок.

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

И, конечно же, я выполняю DDL через эти сценарии, а не непосредственно в базе данных, чтобы все было синхронизировано.

После долгого исследования я выяснил, что есть некоторые сторонние инструменты или типы проектов Visual Studio, которые меня не устраивают, или просто блоги о теории, но без реализации. Итак, я внедрил рабочую систему, которая используется почти год, и объяснил здесь:

http://nalgorithm.com/2015/11/09/database-versioning-part-1/

в зависимости от интереса, продолжу писать дальше.

Привет, добро пожаловать в SO. Этот ответ на самом деле не полный, в основном он предоставляет только ссылку. Ответы только по ссылкам не самые лучшие: если ссылка когда-либо станет недействительной, ваш ответ станет бесполезным. Поэтому, пожалуйста, отредактируйте его и добавьте хотя бы краткое изложение того, что там можно найти, чтобы ваш ответ имел ценность независимо от ссылки. Спасибо!

Fabio says Reinstate Monica 07.04.2016 12:18

Для 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

Thanks 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: --------

Другие вопросы по теме