views:

245

answers:

2

Hi,

I have a table generated by GORM (Grails Domain). It has foreign key / index that generated random characters like FKAC7AAF67162A158F. I need to remove that field that not needed anymore.

The problems, I have some servers that need to be updated. So I need to create a migration using Liquibase. But I have no idea how to remove that index manualy if the index are in random name (each server my have different name).

is it possible to drop an index of something without knowing its name ?

+3  A: 

According to the MySQL Manual...

SHOW INDEX FROM mydb.mytable;

will return information about the mytable. It returns several fields with info about the table and its index, including a Column_name and key_name fields. You can probably sort out which one you need.

After that, you should be able to execute this:

DROP INDEX index_name ON tbl_name

And boom, no more index.

Frank DeRosa
but I have 4 index generated by GORM. each index has different field. so I just need to remove 1 field only. another problem, I need to create on liquibase so when it executed, it will remove the index. Does liquibase has "logic scripting" like "if then else" ?
nightingale2k1
+2  A: 

If you are wanting to script the drop index from liqubase, you are going to need to do some scripting since the standard drop index requires an index name.

One option is to use a custom change class using the SQL from Frank's answer or access the JDBC metadata to get the actual index name from a passed table.

Another option would be to create a stored procedure which takes a table name as a parameter and queries the information_schema to get the correct index name and then drops it.

Nathan Voxland