这就是我的专栏
<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
?
答案 0 :(得分:3)
您可以像这样执行SQL,但它可能不适用于所有数据库:
<sql>alter table Person drop unique (name)</sql>
如果该列上有明确创建的索引,您可能也希望删除它:
<sql>alter table Person drop unique (name) drop index</sql>
这适用于Oracle,其他数据库可能有不同的语法。
答案 1 :(得分:2)
我最终创建了一个新列来替换具有唯一约束的列。
<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"/>
答案 2 :(得分:1)
如果您使用postgresql,则可以在pgAdmin中找到所需的constraintName。选择你的列,然后转到右边的第四个标签(我相信它会被称为“依赖项”,或类似的东西)
正如您所看到的,在我的情况下,constraintName是“public.external_message_storage_message_external_uuid_key”然后只做
ngAfterContentInit(): void {
// This does not work
let value = this.vs.nativeElement.nextSibling.nodeValue as string;
}
答案 3 :(得分:0)
常见的方法是:
删除旧列
<changeSet id="20170711-001" author="yourName">
<addColumn tableName="tableName">
<column name="name2" type="VARCHAR(255)">
<constraints nullable="false" unique="false" />
</column>
</addColumn>
</changeSet>
<changeSet author="yourName" id="20170711-002">
<update tableName="tableName">
<column name="name2" type="varchar(255)" valueComputed="originalColumn"/>
</update>
</changeSet>
<changeSet author="yourName" id="20170711-003">
<dropColumn columnName="originalColumn" tableName="tableName"/>
</changeSet>
如果要像旧原始列一样重命名新列,只需通过更改列的名称重复这些步骤。
答案 4 :(得分:0)
这是一个古老的问题,但是。当我使用列名称作为约束名称时,对我来说有效: (MySQL)
<changeSet id="remove_unique_column_constraint" author="author">
<dropUniqueConstraint schemaName="xxx"
tableName="xxx"
constraintName="column_name"/>
<rollback>
<addUniqueConstraint schemaName="xxx"
tableName="xxx"
columnNames="some_id"
constraintName="constraint_name"/>
</rollback>
</changeSet>
在回滚中,您可以设置以前的约束名称或新的约束名称。但是,如果在回滚中将设置新的constraintName,则应进行回滚并在dropUniqueConstraint命令中设置此名称。
答案 5 :(得分:0)
在liquibase中,dropUniqueConstraint
对于某些类似postgres 9.6.6 aurora
的数据库存在问题,因此对于丢弃唯一约束,请使用以下命令:
- changeSet:
id: dropunique_constraints
author: ankitaggarwal
changes:
- dropForeignKeyConstraint:
baseTableName: member_account
constraintName: composite_unique_member_account
或
- changeSet:
id: dropunique_constraints
author: ankitaggarwal
changes:
- sql:
sql: "ALTER TABLE member_account DROP CONSTRAINT composite_unique_member_account"
答案 6 :(得分:0)
我使用以下代码解决这个问题:
<changeSet id="202112050129-1" author="ousama">
<sql>
Declare @Cons_Name NVARCHAR(100)
Declare @Str NVARCHAR(500)
SELECT @Cons_Name=name FROM sys.objects WHERE type='UQ' AND OBJECT_NAME(parent_object_id) = N'tableName'
SET @Str='ALTER TABLE tableName DROP CONSTRAINT ' + @Cons_Name
Exec (@Str)
</sql>
</changeSet>
希望对您有所帮助
答案 7 :(得分:-2)
我认为您最好的办法是查询您的信息架构数据库以查找名称,然后使用它来删除它并使用ChangeLog
这对我有用:
SELECT `CONSTRAINT_NAME`
FROM `TABLE_CONSTRAINTS`
WHERE `CONSTRAINT_TYPE` LIKE 'UNIQUE'
当然,这会返回数据库中的每个唯一约束名称,但您应该能够从那里缩小搜索范围。