【问题标题】:How to delete an index in Grails with Liquibase如何使用 Liquibase 删除 Grails 中的索引
【发布时间】:2009-11-06 05:38:14
【问题描述】:

我有一个由 GORM(Grails 域)生成的表。它具有生成随机字符的外键/索引,例如 FKAC7AAF67162A158F。我需要删除不再需要的那个字段。

问题,我有一些服务器需要更新。所以我需要使用 Liquibase 创建一个迁移。但是如果索引是随机名称(每个服务器我有不同的名称),我不知道如何手动删除该索引。

是否可以在不知道其名称的情况下删除某事物的索引?

【问题讨论】:

    标签: database grails migration grails-orm liquibase


    【解决方案1】:

    根据MySQL Manual...

    SHOW INDEX FROM mydb.mytable;
    

    将返回有关 mytable 的信息。它返回几个字段,其中包含有关表及其索引的信息,包括 Column_namekey_name 字段。你大概可以挑选出你需要哪一个。

    之后,你应该可以执行这个了:

    DROP INDEX index_name ON tbl_name
    

    然后繁荣,没有更多的索引。

    【讨论】:

    • 但我有 4 个由 GORM 生成的索引。每个索引都有不同的字段。所以我只需要删除 1 个字段。另一个问题,我需要在 liquibase 上创建,所以当它执行时,它会删除索引。 liquibase 有像“if then else”这样的“逻辑脚本”吗?
    • 删除它们并添加你想要的。
    【解决方案2】:

    您可以使用数据库迁移插件 (liquibase) 删除索引。它要求您知道索引名称,但该名称应该在您之前的迁移之一中。

    // older index added in a previous release  
    changeSet(author: "frank", id: "1354228052849-1") {
        createIndex(indexName: "FKAC7AAF67162A158F", tableName: "answer_option") {
            column(name: "question_id")
        }
    }
    

    创建一个新的迁移以删除索引。

    changeSet(author: "joe@example.com", id: "1381257863746-1") {
        dropIndex(indexName: "FKAC7AAF67162A158F", tableName: "answer_option")
    }
    

    【讨论】:

    • 您还可以执行以下操作:changeSet(author: "joe@example.com", id: "1381257863746-1") { sql('DROP INDEX FKAC7AAF67162A158F') }
    【解决方案3】:

    如果您想从 liqubase 编写放置索引的脚本,则需要编写一些脚本,因为标准放置索引需要索引名称。

    一种选择是使用custom change class,使用 Frank 回答中的 SQL 或访问 JDBC 元数据以从传递的表中获取实际的索引名称。

    另一种选择是创建一个存储过程,它将表名作为参数并查询 information_schema 以获取正确的索引名称,然后将其删除。

    【讨论】:

      【解决方案4】:

      使用 liquibase 执行此操作的另一种方法是执行以下操作:

      changeSet(author: "joe@example.com", id: "1381257863746-1") { sql('DROP INDEX FKAC7AAF67162A158F') }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-30
        • 2022-01-06
        • 2020-03-26
        • 2016-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多