Добавление сложного уникального ограничения в Liquibase

Я создаю таблицу ссылок, которая имеет 3 столбца; id, product_id, tournament_id.

Добавление уникальной константы в столбец "id" является тривиальным, но я хочу убедиться, что любая пара (product_id, tournament_id) уникальна.

В примере на Liquibase.org показано

<changeSet author="liquibase-docs" id="addUniqueConstraint-example">
<addUniqueConstraint catalogName="cat"
        columnNames="id, name"
        constraintName="const_name"
        deferrable="true"
        disabled="true"
        initiallyDeferred="true"
        schemaName="public"
        tableName="person"
        tablespace="A String"/>
</changeSet>

но возможно ли это сделать в блоке <createTable>?

Кроме того, просто для подтверждения; создает ли это составное уникальное ограничение в двух столбцах или создает два отдельных уникальных ограничения?

Ответ 1

Я вполне уверен, что:

  • Вы не можете делать это внутри самого тега createTable, но можете делать это в том же наборе изменений, что и при создании таблицы.
  • создает составное уникальное ограничение для двух столбцов. Один из способов проверить - запустить linibase с помощью команды для генерации SQL для обновления, а не для запуска команды обновления и проверки того, что она делает для вашей базы данных. В командной строке вместо запуска liquibase update вы запустите liquibase updateSQL.

Ответ 2

Вы можете прочитать Liquibase руководство и аналогичную проблему вы можете найти здесь

В вашем случае это должно быть:

<changeSet author="liquibase-docs" id="addUniqueConstraint-example">
<addUniqueConstraint
        columnNames="id, product_id, tournament_id"
        constraintName="your_constraint_name"
        tableName="person"
        />
</changeSet>