Согласно документации 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:
- удаление внешних ключей (dropForeignKey)
- выполнениеСценарий dropUniqueConstraint и
- повторно добавляют внешние ключи (addForeignKey)
Есть ли другой способ пойти?Кто-нибудь испытывал что-то подобное с другой системой БД?
ОБНОВЛЕНИЕ 2
Кажется, что проблема воспроизводима с mySQL тоже