Как заставить предварительные условия работать из Java примененных журналов изменений? - PullRequest
1 голос
/ 13 июля 2020

Я пытаюсь использовать предварительные условия для пропуска ревизий CreateTable и MARK_RAN, если таблица существует. Кажется, что предварительные условия игнорируются, поскольку Liquibase регистрирует ошибку в таблице существует, поскольку он пытается создать существующую таблицу в MYSQL (в AWS Aurora).

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.10.xsd">

    <changeSet author="xxx" id="1231">
        <preConditions onFail="MARK_RAN">
            <not>
                <tableExists tableName="tenant"/>
            </not>
        </preConditions>
        <createTable tableName="tenant">
            <column autoIncrement="true" name="tenantId" type="int(11)">
                <constraints primaryKey="true" nullable="false"
                    unique="false" />
            </column>
         ...

Журналы изменений применяются с использованием следующих Java код:

            final Database dataBase = DatabaseFactory.getInstance()
                    .findCorrectDatabaseImplementation(new JdbcConnection(connection));
            final Liquibase liquiBase = new liquibase.Liquibase(CHANGE_LOG_FILE, RESOURCE_ACCESSOR, dataBase);
            liquiBase.update(CONTEXTS, LABEL_EXPRESSION);

Ошибка:


Response: {"errorMessage":"Failed to connect to Liquibase due to Migration failed for change set db.changelog-1.1.xml::1231::xxx:\n     Reason: liquibase.exception.DatabaseException: Table 'tenant' already exists [Failed SQL: CREATE TABLE xxx_global.tenant (tenantId INT AUTO_INCREMENT NOT NULL, region VARCHAR(255) NULL, tenantName VARCHAR(255) NULL, CONSTRAINT PK_TENANT PRIMARY KEY (tenantId))]"}

Моя единственная другая мысль - попытаться использовать настраиваемый контекст в наборах изменений CreateTable для чистых установок

1 Ответ

0 голосов
/ 14 июля 2020

Я обнаружил проблему, но не в Liquibase. Стек AWS, содержащий лямбда-код для вызова Liquibase, не обновлялся. Я удалил и заново создал стек, и он начал работать.

...