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)