Liquibase changeSet с failOnError= "false" всегда выполняется?

Я пытаюсь выполнить следующее changeSet в liquibase, который должен создать индекс. Если индекс не существует, он должен молча терпеть неудачу:

<changeSet failOnError="false" author="sys" id="1">
    <createIndex unique="true"  indexName="key1" tableName="Table1">
        <column name="name" />
    </createIndex>
</changeSet>

пока все хорошо. Проблема в том, что это changeSet не регистрируется в таблице DATABASECHANGELOG и выполняется каждый раз при запуске liquibase. Согласно документации liquibase и, например,ответ из Nathen Voxland я думал, что набор изменений должен быть отмечен как запущенный в Таблица DATABASECHANGELOG. Вместо этого он вообще не регистрируется и, как я уже говорил, выполняется каждый раз, когда liquibase запускается (и каждый раз терпит неудачу).

Я что-то пропустила?

(Я использую MySQL в качестве СУБД)

1 ответов


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

Мне кажется, что игнорировать неудачу-плохая идея.... Означает, что вы не полностью контролируете конфигурацию базы данных.... Параметр "failOnError" позволяет liquibase продолжить работу. Не было бы плохой идеей для сборки записать набор изменений как выполненный, если на самом деле это не так потому что произошла ошибка?