簡體   English   中英

如何使用Liquibase刪除Grails中的索引

[英]How to delete an index in Grails with Liquibase

我有一個由GORM(Grails Domain)生成的表。 它具有生成隨機字符的外鍵/索引,如FKAC7AAF67162A158F。 我需要刪除不再需要的字段。

問題,我有一些需要更新的服務器。 所以我需要使用Liquibase創建一個遷移。 但我不知道如果索引是隨機名稱(每個服務器我有不同的名稱),如何刪除該索引manualy。

是否可以在不知道其名稱的情況下刪除某個索引?

根據MySQL手冊 ......

SHOW INDEX FROM mydb.mytable;

將返回有關mytable的信息。 它返回幾個字段,其中包含有關表及其索引的信息,包括Column_namekey_name字段。 你可以找出你需要的那個。

之后,您應該能夠執行此操作:

DROP INDEX index_name ON tbl_name

繁榮,沒有更多的指數。

您可以使用database-migration插件(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")
}

如果您想要從liqubase編寫drop index,則需要執行一些腳本,因為標准drop index需要索引名稱。

一種選擇是使用來自Frank的答案的SQL來使用自定義更改類 ,或者訪問JDBC元數據以從傳遞的表中獲取實際的索引名稱。

另一種選擇是創建一個存儲過程,該過程將表名作為參數,並查詢information_schema以獲取正確的索引名稱,然后刪除它。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM