Pergunta

Eu tenho uma tabela gerada por GORM (Grails Domínio). Ele tem chave / index estrangeira que gerou caracteres aleatórios como FKAC7AAF67162A158F. Eu preciso remover esse campo que não mais necessário.

Os problemas, eu tenho alguns servidores que precisam ser atualizados. Então eu preciso para criar uma migração usando Liquibase. Mas eu não tenho idéia como remover esse índice manualmente se o índice está em nome aleatório (cada servidor meus tem nome diferente).

é possível eliminar um índice de algo sem saber seu nome?

Foi útil?

Solução

Você pode remover o índice usando o banco de dados migração plug-in (liquibase). Ela exige que você sabe o nome do índice, mas esse nome deve estar em um de seus migrações anteriores.

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

Criar uma nova migração para remover o índice.

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

Outras dicas

De acordo com a MySQL ...

SHOW INDEX FROM mydb.mytable;

retornará informações sobre o mytable. Ele retorna vários campos com informações sobre a mesa e seu índice, incluindo um Column_name e key_name campos. Você pode provavelmente resolver qual deles você precisa.

Depois disso, você deve ser capaz de executar este:

DROP INDEX index_name ON tbl_name

E o crescimento, não mais índice.

Se você está querendo fazer o script do índice de queda de liqubase, você vai precisar fazer alguns scripts desde que o índice queda de padrão exige um nome de índice.

Uma opção é usar um classe mudança costume usando o SQL de resposta ou acesso de Frank os metadados JDBC para obter o nome do índice real de uma tabela aprovada.

Outra opção seria a criação de um procedimento armazenado que leva um nome de tabela como um parâmetro e consulta o information_schema para obter o nome índice correto e, em seguida, cai-lo.

Outra maneira de fazer isso com liquibase seria fazer o seguinte:

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top