代码之家  ›  专栏  ›  技术社区  ›  Mad Scientist

liquibase changelog中的where子句创建数据库

  •  -1
  • Mad Scientist  · 技术社区  · 6 年前

    如何使用Liquibase在变更日志文件中生成此SQL语句?

    CREATE UNIQUE INDEX RL_UK on RUN_LOG(status) WHERE status = 'R'
    

    我这样试过,但没用:

        <changeSet author="Ferid (generated)" id="1528876614155-232">
        <createIndex indexName="RL_UK" tableName="RUN_LOG" unique="true">
            <where> status='R'</where>
        </createIndex>
    

    我不使用这个变更日志文件来更新数据库,而是创建它。

    1 回复  |  直到 6 年前
        1
  •  0
  •   teikitel    6 年前

    该条款不可用。

    如注释中所建议的,您可以编写带有标记的自定义sql语句,但您必须自己处理回滚:

    <changeSet author="Ferid (generated)" id="1528876614155-232">
        <sql>
            CREATE UNIQUE INDEX RL_UK on RUN_LOG(status) WHERE status = 'R';
        </sql>
        <rollback>
            <sql>
                DROP INDEX RL_UK on RUN_LOG;
            </sql>
        </rollback>
    </changeSet>
    

    尽管我个人建议您在不使用where子句的情况下正确使用标记,因为:

    • 我不明白你想用where子句来达到什么目的。尤其是因为它在同一列
    • 您的变更集可能与Liquibase支持的所有数据库都不兼容,因此它将与Postgres一起工作,例如与Oracle一起失败。create index语句中的where子句可能甚至不是ansi-sql
    • 您还为一个非常简单的语句的回滚添加了麻烦=>不值得。此标记的每个受支持数据库上都有自动回滚功能。在这里检查: http://www.liquibase.org/documentation/changes/create_index.html