Как я могу поместить базу данных в git (контроль версий)? - PullRequest
249 голосов
/ 11 мая 2009

Я делаю веб-приложение, и мне нужно сделать ветку для некоторых важных изменений, дело в том, что эти изменения требуют изменений в схеме базы данных, поэтому я бы хотел также поместить всю базу данных в git .

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

Мне нужно быть уверенным, потому что эти изменения не имеют обратной совместимости; Я не могу позволить себе облажаться.

База данных в моем случае - PostgreSQL

Edit:

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

Должен быть лучший путь.

Обновление:

ОК, так что лучшего способа нет, но я все еще не совсем уверен, поэтому я немного изменю вопрос:

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

Будет ли sqlite дружелюбным к людям?

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

Edit2:

Что я действительно хочу, так это не отслеживать историю своего развития, а уметь переключаться с моей ветки «новые радикальные изменения» на «текущую стабильную ветку» и, например, исправлять некоторые ошибки / проблемы и т. Д. с текущей стабильной веткой. Таким образом, когда я переключаю ветки, база автоматически становится совместимой с веткой, в которой я сейчас работаю. Меня не особо волнуют фактические данные.

Ответы [ 23 ]

0 голосов
/ 11 августа 2010

Используйте такой инструмент, как iBatis Migrations ( руководство , краткое учебное видео ), которое позволяет вам контролировать версии изменений , которые вы вносите в базу данных на протяжении жизненного цикла проекта, а не самой базы данных.

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

0 голосов
/ 29 апреля 2019

Я некоторое время искал ту же функцию для Postgres (или баз данных SQL в целом), но я не нашел подходящих инструментов (простых и интуитивно понятных). Вероятно, это связано с бинарным характером хранения данных. Klonio звучит идеально, но выглядит мертвым. Noms DB выглядит интересно ( и живой ). Также обратите внимание на Irmin (на основе OCaml со свойствами Git).

Хотя это не отвечает на этот вопрос, поскольку он будет работать с Postgres, проверьте базу данных Flur.ee . Он имеет функцию «путешествия во времени», которая позволяет запрашивать данные с произвольного момента времени. Я предполагаю, что это должно быть в состоянии работать с "ветвящейся" моделью.

Эта база данных была недавно разработана для целей блокчейна. Из-за природы блокчейнов, данные должны записываться с приращением, как и работает git. Они нацелены на релиз с открытым исходным кодом во втором квартале 2019 года .

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

0 голосов
/ 29 марта 2012

Вот что я пытаюсь сделать в своих проектах:

  • отдельные данные, схема и данные по умолчанию.

Конфигурация базы данных хранится в файле конфигурации, который не контролируется версиями (.gitignore)

База данных по умолчанию (для настройки новых проектов) представляет собой простой файл SQL под управлением версией.

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

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

Взгляните на другие крупные проекты баз данных с открытым исходным кодом (piwik или вашу любимую систему cms), все они используют сценарии обновлений (1.sql, 2.sql, 3.sh, 4.php.5.sql)

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

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

После этого в вашем обычном скрипте обновлений (запустите обычные скрипты обновлений для особых случаев), а затем сравните схемы (дамп и текущая база данных), а затем автоматически сгенерируйте необходимые инструкции ALTER. Есть некоторые инструменты, которые уже могут это сделать, но еще не нашли хорошего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...