Liquibase Changeset без предусловий - PullRequest
1 голос
/ 04 мая 2020

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

<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>

1 Ответ

0 голосов
/ 04 мая 2020

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


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

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

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

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

...