liquibase changelog 中用于创建数据库的 WHERE 子句

WHERE clause in liquibase changelog to create database

如何使用 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>

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

条款不可用。

正如评论中所建议的,您可以编写带有标签的自定义 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 CLAUSE 可能甚至不是 ANSI-SQL
  • 你为一个非常简单的语句添加了关于回滚的烦恼 => 不值得。此标记的每个支持的数据库都可以使用自动回滚。在这里查看:http://www.liquibase.org/documentation/changes/create_index.html