【问题标题】:Liquibase create indexes with functionsLiquibase 使用函数创建索引
【发布时间】:2014-09-16 11:37:40
【问题描述】:

我在 postgresql 中有这个数据库,它有这个索引:

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

当我对这个数据库进行逆向工程时,我得到了这个 liquibase 更改日志:

<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>

当我在 PostgreSql 数据库上应用更新时,这可以正常工作,但是,例如,它不适用于 MySql。所以我的问题是我怎样才能使这个索引创建也可用于 MySql、MSSQL 和 Oracle,同时保留 fava_alias 的小写?

谢谢

【问题讨论】:

  • "我怎样才能使这个索引创建可用于 MySql、MSSQL" - 简单的答案:你不能。在 MySQL(和 SQL Server)中,您将为该列分配不区分大小写的排序规则并在其上创建常规索引。对于 Oracle,如果您删除(不必要的)::text cast,它应该可以正常工作

标签: mysql sql postgresql indexing liquibase


【解决方案1】:

如果该功能在您的数据库中可用,您可以在 liquibase 中使用它。有一种方法可以使用 dbms 属性来区分不同的 DB。

<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>

【讨论】:

猜你喜欢
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-17
  • 2017-04-27
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多