问题 在Liquibase中添加复合唯一约束


我正在创建一个包含3列的链接表; id,product_id,tournament_id。

将uniqueConstraint添加到“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> 块?

另外,只是为了确认;这会创造一个 复合唯一约束 在两列上,还是创建两个独立的唯一约束?


3751
2018-01-28 12:47


起源



答案:


我很确定:

  1. 不能 在createTable标签本身内做,但是你 能够 在与创建表时相同的变更集中执行此操作。
  2.  在两列上创建复合唯一约束。您可以检查的一种方法是使用命令运行liquibase以生成用于更新的SQL,而不是运行update命令并检查它对数据库的作用。在命令行上,而不是运行 liquibase update 你会跑 liquibase updateSQL

8
2018-01-28 17:58





你可以阅读liquibase 手册 您也可以找到类似的问题 这里 

在你的情况下它应该是:

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

1
2018-02-06 07:53