2014-09-16 21 views
6

Tôi có cơ sở dữ liệu này trong postgresql trong đó có chỉ số này:Liquibase tạo chỉ mục với các chức năng

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

Khi tôi đảo ngược thiết kế cơ sở dữ liệu này, tôi đã liquibase này 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> 

này hoạt động tốt khi tôi áp dụng bản cập nhật trên cơ sở dữ liệu PostgreSql, tuy nhiên, nó không hoạt động trên MySql chẳng hạn. Vì vậy, câu hỏi của tôi là làm thế nào tôi có thể làm cho chỉ mục này tạo ra có sẵn cho MySql, MSSQL và Oracle quá, bảo quản việc giảm fava_alias?

Cảm ơn

+0

"* làm cách nào để tạo chỉ mục này có sẵn cho MySql, MSSQL *" - câu trả lời đơn giản: bạn không thể. Trong MySQL (và SQL Server), bạn sẽ gán một collation phân biệt chữ hoa chữ thường cho cột đó và tạo một chỉ mục thông thường trên nó. Đối với Oracle, nó sẽ hoạt động tương tự nếu bạn loại bỏ (không cần thiết) ':: text' cast –

Trả lời

2

Nếu chức năng có sẵn trong Cơ sở dữ liệu của bạn, bạn có thể sử dụng nó trong chế độ lỏng. Có một cách để phân biệt giữa các DB khác nhau bằng thuộc tính 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> 
Các vấn đề liên quan