H2, mySQL - проблема выпадения liquibase dropUniqueConstraint, когда уникальные поля ограничений также являются внешними ключами - PullRequest
0 голосов
/ 16 января 2019

Согласно документации liquibase dropUniqueConstraint поддерживается почти каждой базой данных.

Я использую h2 mysql) и определив уникальное ограничение следующим образом:

<changeSet id="someId">
    <addUniqueConstraint tableName="some_table"
                         columnNames="some_foreigh_key_id, another_foreign_key_id"
                         constraintName="constraint_name"/>
 </changeSet>

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

<changeSet id="someId-a">
     <dropUniqueConstraint tableName="some_table"
                          columnNames="some_foreigh_key_id, another_foreign_key_id"
                          constraintName="constraint_name" />
  </changeSet>

Странно то, что он работает для других баз данных (тесты с postgres )

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

ОБНОВЛЕНИЕ

Примечание : Кажется, что уникальное ограничение действительно сбрасывается, но не индексы, которые используются им.Более конкретно:

   SELECT* FROM information_schema.constraints 
           WHERE table_name='some_table' AND constraint_type='UNIQUE';

не возвращает результатов и

 SELECT index_name, column_name
    FROM information_schema.indexes 
    WHERE index_name LIKE 'constraint_name%';

возвращает

INDEX_NAME              | INDEX_COLUMN
CONSTRAINT_NAME_INDEX_3 | some_foreigh_key_id
CONSTRAINT_NAME_INDEX_3 | another_foreign_key_id

Теперь, если я пытаюсь вручную удалить этот индекс, я получаю следующую ошибку:

DROP INDEX CONSTRAINT_NAME_INDEX_3;
[90085][90085] Index "CONSTRAINT_NAME_INDEX_3" belongs to constraint  "some_foreigh_key_id"
               Index "CONSTRAINT_NAME_INDEX_3" belongs to constraint "another_foreign_key_id";
SQL statement: drop index CONSTRAINT_NAME_INDEX_3    [90085-196]

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

  1. удаление внешних ключей (dropForeignKey)
  2. выполнениеСценарий dropUniqueConstraint и
  3. повторно добавляют внешние ключи (addForeignKey)

Есть ли другой способ пойти?Кто-нибудь испытывал что-то подобное с другой системой БД?

ОБНОВЛЕНИЕ 2

Кажется, что проблема воспроизводима с mySQL тоже

...