Мы используем git для управления нашими репозиториями кода.

Один из наших репозиториев - репозиторий миграции базы данных, который использует flywaydb.

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

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

Например, я создаю представление, и кто-то обновляет это представление через несколько дней ... для этого потребуются два файла, например:

V20181121131512__create_myview.sql
V20181126235217__replace_myview.sql

В каждом представлении мы СОЗДАЕМ или ЗАМЕНЯЕМ представление и просто обновляем его. Я хотел бы знать, можно ли каким-либо образом настроить git для выполнения различий при фиксации в соответствии с шаблоном именования файлов. Например, суффикс, который будет соответствовать тому же имени объекта базы данных.

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

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

0
Mark 26 Ноя 2018 в 21:17

1 ответ

Лучший ответ

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

Они позволяют вам хранить историю вашего представления в том же файле в Git. Flyway будет автоматически повторно применять его при изменении контрольной суммы.

1
Axel Fontaine 26 Ноя 2018 в 21:29