Liquibase:如何删除没有约束名称的唯一约束?

这是我的专栏的样子

        <column name="name" type="VARCHAR(255)">
            <constraints nullable="false" unique="true"/>
        </column>

我想删除unique=true约束。

我研究了liquibase必须提供的功能

<changeSet author="liquibase-docs" id="dropUniqueConstraint-example">
    <dropUniqueConstraint catalogName="cat"
            constraintName="const_name"
            schemaName="public"
            tableName="person"
            uniqueColumns="A String"/>
</changeSet>

现在由于constraintName是必需的,我没有它,我有什么选择?

如何使用liquibase删除unique=true


您可以像这样执行SQL,但它可能无法在所有数据库上运行:

<sql>alter table Person drop unique (name)</sql>

如果在该列上有明确的创建索引,则可能也想要删除该索引:

<sql>alter table Person drop unique (name) drop index</sql>

这适用于Oracle,其他数据库可能有不同的语法。


我最终创建了一个新列来替换具有唯一约束的列。

<addColumn tableName="TABLE" schemaName="SCHEMA">
<column name="NEW_COLUMN" type="TYPE" valueComputed="OLD_COLUMN"></column>
</addColumn>

<dropColumn tableName="TABLE" schemaName="SCHEMA" columnName="OLD_COLUMN"/>

<renameColumn tableName="TABLE" schemaName="SCHEMA" oldColumnName="NEW_COLUMN" newColumnName="OLD_COLUMN"/>

如果使用postgresql,则可以在pgAdmin中找到所需的constraintName。 选择你的专栏,然后去右边的第四个标签(我相信它会被称为“依赖”,或类似的东西)

在这里输入图像描述

正如你所看到的,在我的情况下,constraintName是“public.external_message_storage_message_external_uuid_key”然后,只要做

    <changeSet author="me"  id="dropping constraint">
        <dropUniqueConstraint constraintName="external_message_storage_message_external_uuid_key"
                          schemaName="public"
                          tableName="external_message_storage"
                          uniqueColumns="message_external_uuid"/>
    </changeSet>
链接地址: http://www.djcxy.com/p/21913.html

上一篇: Liquibase: How to drop unique constraint with no constraint name?

下一篇: Bug in the Amazon SNS Apple Push Notification Tutorial (Null Pointer Exception)