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