Liquibase «только для проверки» - PullRequest
1 голос
/ 10 февраля 2020

Можно ли использовать Liquibase только для проверки согласованности базы данных?

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

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

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

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

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

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

0 голосов
/ 10 февраля 2020

Можно использовать Liquibase для проверки схемы БД, однако она не совсем предназначена для этого.

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

<changeSet author="author_name" id="changeset_id" runAlways="true">
    <preConditions onFail="HALT">
        <tableExists tableName="foo_bar"/>
    </preConditions>
    <comment>Table "foo_bar" exists.</comment>
</changeSet>

Этот набор изменений ничего не делает, но проверяет, существует ли таблица foo_bar. Атрибут

runAlways="true" сообщит Liquibase о выполнении набора изменений при каждом запуске приложения. .

onFail="HALT" выдаст ошибку, если таблица foo_bar не существует, следовательно, если предварительные условия не были выполнены.

...