2012-05-12 7 views
9

quando uso il Grails Database Migration Plugin ed eseguire un dbm-gorm-diff (ad esempio, dopo l'installazione del plug-in Primavera di sicurezza di Facebook) Sono stato sempre problemi come:Grails database di migrazione Problemi Plugin

Error: Error executing SQL CREATE INDEX `FK609FD5A460CFCC39` ON `facebook_user`(`user_id`): Incorrect index name 'FK609FD5A460CFCC39' 

Sembra che l'indice in questione è sia un vincolo FK che viene poi riutilizzato come indice più avanti nello script di aggiornamento generato. Se cambio il nome, rimuovendo così il duplicato, tutto funziona correttamente. Sto usando Mysql. Sto facendo qualcosa di sbagliato?

Grazie.

+0

Hai utilizzato il plugin fino ad ora? – David

+0

@David È ancora abbastanza nuovo per me. Ho provato alcuni aggiornamenti di base e hanno funzionato. – skaz

+0

Stavo pensando se forse hai 'dbcreate =" .. qualcosa .. "' nel tuo file DataSource.groovy potrebbe essere in conflitto con il plugin. Ma se hai già fatto degli aggiornamenti, sembra che sia meno probabile. – David

risposta

9

Ho appena scoperto che se modifico changelog.groovy per posizionare addForeignConstraint dopo createIndex, funziona come un incantesimo. Ancora un altro problema nello script di generazione del changelog, suppongo.

+1

Strana, questa soluzione non ha funzionato per me. Ho avuto più 'addForeignConstraint's e multipli' createIndex's. Cambiare la chiave gli ha permesso di funzionare anche se ... non so se questo avrà effetti collaterali in seguito. – Weezle

1

Come da this question/answer, MySQL indicizza automaticamente le colonne di chiavi esterne. Pertanto, quando si aggiunge un vincolo di chiave esterna, non è necessario definire anche un indice. Io uso il plugin di migrazione db e rimuovo solo le voci 'index' per le chiavi esterne generate da dbm-gorm-diff.

Penso che sia un po 'meglio che cambiare il nome, poiché è probabile che crei più di un indice sulla stessa colonna che è solo uno spreco di risorse.