Набор изменений Liquibase без предварительных условий

Что произойдет, если мы не добавим предварительное условие в набор изменений и не запустим его дважды? Будет ли он помечен как запущенный по умолчанию? Например, это набор изменений:

<changeSet id="xxx" author="kurkesh">

    <createProcedure>DO $$ BEGIN
        CREATE TYPE enum_mobile AS ENUM('ANDROID', 'IOS', 'WINDOWS');
        EXCEPTION
        WHEN duplicate_object THEN null;
        END $$;
    </createProcedure>
</changeset>

person Ramkrishna Maheta    schedule 04.05.2020    source источник


Ответы (1)


Да, ваш набор изменений будет помечен как ВЫПОЛНЕННЫЙ и больше не будет выполняться.


Когда вы выполняете свой changeSet в первый раз, Liquibase делает отметку в таблице databasechangelog, что changeSet с идентификатором «xxx» успешно выполнен.

Когда вы попытаетесь выполнить этот точный набор изменений во второй раз, Liquibase проверит таблицу databasechangelog. И если есть запись о changeSet "xxx" (о том, что он был выполнен успешно), то этот changeSet будет проигнорирован и не будет выполнен во второй раз.

Но не рекомендуется игнорировать предварительные условия. Когда-нибудь кто-нибудь напишет другой набор изменений, который будет делать то же самое, и ваше приложение потерпит неудачу, потому что вы не сможете создать одно и то же перечисление дважды.

Для получения дополнительной информации о том, как Liquibase хранит данные об уже выполненных наборах изменений, ознакомьтесь с этим ">вопрос.

person htshame    schedule 04.05.2020