Как прилично отследить изменение структуры базы данных SVN? - PullRequest
6 голосов
/ 30 августа 2010

Основная проблема - управление версиями структуры базы данных.

Стандартные утилиты mysqldump и pg_dump не дают очень подходящих файлов для управления версиями.

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

PostgreSQL Diff

 --
--- TOC entry 2630 (class 0 OID 0)
+-- TOC entry 2549 (class 0 OID 0)
 -- Dependencies: 6
 -- Name: SCHEMA adm; Type: COMMENT; Schema: -; Owner: admin
@@ -61,5 +61,5 @@

MySQL Diff

--- Dump completed on 2010-07-20 14:33:44
+-- Dump completed on 2010-08-11  8:59:39
Index: /db.sql
===================================================================
--- /db.sql (revision 1274)
+++ /db.sql (revision 1317)
@@ -36,5 +36,5 @@
   `message` text,
   PRIMARY KEY  (`id`)
-) ENGINE=MyISAM AUTO_INCREMENT=21122 DEFAULT CHARSET=utf8;
+) ENGINE=MyISAM AUTO_INCREMENT=23730 DEFAULT CHARSET=utf8;

Любые предложения / ссылки / утилиты по улучшению способа контроля версий приветствуются!

Спасибо.

Ответы [ 5 ]

6 голосов
/ 30 августа 2010

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

Это не идеальная система, но она до сих пор работала довольно хорошо для нас.

6 голосов
/ 30 августа 2010

Взгляните на LiquiBase (http://www.liquibase.org/)

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

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

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

2 голосов
/ 07 октября 2010

Вы можете бесплатно использовать Другой PostgreSQL Diff Tool для баз данных PostgreSQL для сравнения вашей схемы разработки и производственной схемы.Вы просто обновляете свою базу данных разработки так, как вам удобнее всего.Когда вы хотите обновить производственную базу данных до состояния базы данных разработки, вы делаете дамп схем (ы) базы данных разработки и схем (ы) производственной базы данных и позволяете apgdiff сравнить их.Он выдаст вам выходные данные, содержащие операторы DDL, необходимые для преобразования вашей производственной базы данных в состояние базы данных разработки.

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

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

2 голосов
/ 02 сентября 2010

Depesz недавно написал сообщение в блоге на тему " КАК УПРАВЛЯТЬ ИЗМЕНЕНИЯМИ В ВАШЕЙ БАЗЕ ДАННЫХ? "

Я бы сказал:

  • Если вы просто сохраняете схему каждого объекта в SVN, вам все равно необходимо развернуть изменения с упорядочением зависимостей и модификаций данных, поэтому все, что действительно вас покупает, - это классификация вашей истории изменений для вовлеченных объектов.
  • Напишите сценарии для выполнения всех ваших изменений, включая сценарии для отмены изменений.
  • Используйте apgdiff для создания (PostgreSQL) различий схемы базы данных.
2 голосов
/ 30 августа 2010

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

Для небольших проектов у меня обычно просто есть файл с именем install.sql, который содержит все мои операторы CREATE и schema.txt, который описывает схему. Для более крупных проектов вы можете использовать что-то вроде dbForge, который позволяет создавать версии схемы базы данных в профессиональной редакции, хотя это немного дорого, если это все, для чего вы его используете.

Ознакомьтесь с этой статьей о Coding Horror (особенно с первой ссылкой в ​​этом посте) для получения дополнительной информации.

...