2014-09-16 14 views
6

ho questo database in PostgreSQL che ha questo indice:Liquibase creare indici con funzioni

CREATE INDEX fav_alias_lower_index ON fav_alias USING hash((LOWER(fav_alias))); 

Quando ho invertito Engineered questa base di dati ho ottenuto questo liquibase changelog:

<changeSet author="jmartins (generated)" id="1410448831080-17"> 
    <createIndex indexName="workspace_favorite_alias_lower_case_index" tableName="workspace_favorite_alias" unique="false"> 
     <column name="lower((fava_alias)::text)"/> 
    </createIndex> 
</changeSet> 

Questo funziona bene quando ho applica un aggiornamento su un database PostgreSql, tuttavia, ad esempio, non funziona su MySql. Quindi la mia domanda è: come posso rendere disponibile questa creazione di indice per MySql, MSSQL e Oracle, preservando il minuscolo di fava_alias?

Grazie

+0

"* Come posso rendere questa creazione dell'indice disponibile per MySql, MSSQL *" - risposta semplice: non è possibile. In MySQL (e SQL Server) si assegnano regole di confronto senza distinzione tra maiuscole e minuscole per quella colonna e si crea un indice regolare su di esso. Per Oracle dovrebbe funzionare allo stesso modo se si rimuove il cast (inutile) ':: text' –

risposta

2

Se la funzione è disponibile nel database, è possibile utilizzare in liquibase. C'è un modo per distinguere tra diversi DB usando l'attributo dbms.

<changeSet author="jmartins (generated)" id="1410448831080-17"> 
    <createIndex indexName="workspace_favorite_alias_lower_case_index" tableName="workspace_favorite_alias" unique="false" dbms="postgresql"> 
     <column name="lower((fava_alias)::text)"/> 
    </createIndex> 
</changeSet> 

<changeSet author="jmartins (generated)" id="1410448831080-17"> 
    <createIndex indexName="workspace_favorite_alias_lower_case_index" tableName="workspace_favorite_alias" unique="false" dbms="oracle"> 
     <column name="lower(fava_alias)"/> 
    </createIndex> 
</changeSet> 
Problemi correlati