【问题标题】:Liquibase unique constarint is not applied for a column named 'name' but works for any other columnsLiquibase 唯一约束不适用于名为“name”的列,但适用于任何其他列
【发布时间】:2020-12-17 11:02:54
【问题描述】:

我想让两列唯一,并且我创建了带有两个 addUniqueConstraint's 的更改列表,因为当我尝试在一个 addUniqueConstraint columnNames 部分中列出所需的列时,它不起作用.

所以,我为“setSpec”列指定了 addUniqueConstraint,为“name”列指定了第二个,但约束仅适用于“setSpec”列,我仍然可以插入具有重复名称值的实体。我也尝试将列从“name”重命名为“set_name”,但行为保持不变。

所以现在我对让两列都独一无二感到困惑。任何人都可以提出解决方案,或者指出我的错误,因为我认为这么大的库不会有这么简单的缺陷。谢谢你。但这是一件有趣的事情,当我只留下一个 addUniqueConstraint 部分时,任何一个指定的列都会得到约束。

这是我的桌子:

<changeSet id="2020-07-07--16-00-create-set-table" author="Illia Daliek">
    <createTable tableName="set">
      <column name="id" type="uuid">
        <constraints primaryKey="true" nullable="false"/>
      </column>
      <column name="name" type="varchar(255)">
        <constraints nullable="false"/>
      </column>
      <column name="description" type="varchar(1024)"/>
      <column name="setSpec" type="varchar(255)">
        <constraints nullable="false"/>
      </column>
      <column name="created_by_user_id" type="uuid"/>
      <column name="created_date" type="timestamptz"/>
      <column name="updated_by_user_id" type="uuid"/>
      <column name="updated_date" type="timestamptz"/>
    </createTable>
  </changeSet>

这是我添加唯一约束的尝试

  <changeSet id="rename-column" author="Illia Daliek">
    <renameColumn tableName="set" oldColumnName="name" newColumnName="set_name"/>
  </changeSet>

  <!--this one works fine-->
  <changeSet  id="2020-08-28--11-00-add-unique-constraint-to-set.set_spec-column " author="Illia Daliek">
    <addUniqueConstraint  columnNames="setSpec"
                          constraintName="unique"
                          schemaName="${database.defaultSchemaName}"
                          tableName="set"/>
  </changeSet>

  <!--this one doesn't work-->
  <changeSet  id="2020-08-28--11-00-add-unique-constraint-to-set.name-column " author="Illia Daliek">
    <addUniqueConstraint  columnNames="set_name"
                          constraintName="unique"
                          schemaName="${database.defaultSchemaName}"
                          tableName="set"/>
  </changeSet>

【问题讨论】:

  • 你得到什么错误?
  • 请注意,每一列上的两个唯一约束与两列上的一个唯一约束不同。但是columnNames="setspec, name" 应该可以在两列上创建约束

标签: java postgresql liquibase liquibase-sql


【解决方案1】:

给第二个约束另一个constraintName。我认为您不能在一张桌子上拥有两个名称相同的约束

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 2016-11-16
  • 2020-07-21
  • 2018-12-07
相关资源
最近更新 更多