So löschen Sie einen Index in Grails mit Liquibase

8

Ich habe eine Tabelle von GORM (Grails Domain) generiert. Es hat Fremdschlüssel / Index, der zufällige Zeichen wie FKAC7AAF67162A158F generiert. Ich muss das Feld entfernen, das nicht mehr benötigt wird.

Die Probleme, ich habe einige Server, die aktualisiert werden müssen. Also muss ich eine Migration mit Liquibase erstellen. Aber ich habe keine Ahnung, wie ich diesen Index manuell entfernen kann, wenn der Index einen zufälligen Namen hat (jeder Server hat einen anderen Namen).

ist es möglich, einen Index von etwas fallen zu lassen, ohne seinen Namen zu kennen?

    
nightingale2k1 06.11.2009, 05:38
quelle

4 Antworten

4

Sie können den Index mit dem Plugin für die Datenbankmigration (liquibase) entfernen. Es erfordert, dass Sie den Indexnamen kennen, dieser Name sollte jedoch in einer Ihrer vorherigen Migrationen enthalten sein.

%Vor%

Erstellen Sie eine neue Migration, um den Index zu entfernen.

%Vor%     
j4y 19.05.2014, 20:01
quelle
34

Nach dem MySQL-Handbuch . .

%Vor%

gibt Informationen zum Mytable zurück. Es gibt mehrere Felder mit Informationen über die Tabelle und ihren Index zurück, einschließlich der Felder Column_name und key_name . Sie können wahrscheinlich herausfinden, welche Sie benötigen.

Danach sollten Sie in der Lage sein, dies auszuführen:

%Vor%

Und Boom, kein Index mehr.

    
Frank DeRosa 06.11.2009 06:01
quelle
2

Wenn Sie den Drop-Index von liqubase scripten möchten, müssen Sie einige Skripte ausführen, da der Standard-Drop-Index einen Indexnamen erfordert.

Eine Option ist die Verwendung einer benutzerdefinierten Änderungsklasse mit dem SQL aus der Antwort von Frank oder Zugriff auf die JDBC-Metadaten, um die aktueller Indexname aus einer übergebenen Tabelle.

Eine andere Option wäre, eine gespeicherte Prozedur zu erstellen, die einen Tabellennamen als Parameter akzeptiert und das information_schema abfragt, um den richtigen Indexnamen zu erhalten, und diesen dann ablegt.

    
Nathan Voxland 06.11.2009 07:23
quelle
0

Eine andere Möglichkeit, dies mit liquibase zu tun, wäre folgendes:

changeSet(author: "[email protected]", id: "1381257863746-1") { sql('DROP INDEX FKAC7AAF67162A158F') }

    
Spencer Powell 07.04.2017 21:17
quelle