Liquibase前提条件不起作用

Ann*_*zer 5 postgresql liquibase

我正在尝试使用liquibase使用dropwizard-migrations跟踪对postgresql数据库的更改。我希望能够在现有的生产数据库上运行迁移,而不是从头开始重建。目前,我正在分阶段进行测试。我已经创建了一个带有前提条件的变更集。

<changeSet id="3" author="me">
    <preConditions onFail="CONTINUE">
        <not>
            <sequenceExists sequenceName="emails_id_seq"/>
        </not>
    </preConditions>
    <createSequence sequenceName="emails_id_seq" startValue="1" incrementBy="1" />
</changeSet>
Run Code Online (Sandbox Code Playgroud)

我的目标是如果序列已经存在,则跳过应用变更集。看起来很简单,但是没有用。

ERROR [2013-09-13 22:19:22,564] liquibase: Change Set migrations.xml::3::me failed.  Error: Error executing SQL CREATE SEQUENCE emails_id_seq START WITH 1 INCREMENT BY 1: ERROR: relation "emails_id_seq" already exists
! liquibase.exception.DatabaseException: Error executing SQL CREATE SEQUENCE emails_id_seq START WITH 1 INCREMENT BY 1: ERROR: relation "emails_id_seq" already exists
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用MARK_RAN而不是CONTINUE。没有运气。

Mar*_*nor 5

将变更集应用到现有数据库而不执行的更简单的方法是使用changelogSync命令。

以下命令演示了如何提取变更日志,然后将其与当前数据库同步:

liquibase --changeLogFile=mydb.xml generateChangeLog
liquibase --changeLogFile=mydb.xml changelogSync
Run Code Online (Sandbox Code Playgroud)

同步命令所做的是在更改日志表中创建所有条目,以便现在可以正常使用 liquibase 文件来更新数据库:

liquibase --changeLogFile=mydb.xml update
Run Code Online (Sandbox Code Playgroud)


Ann*_*zer 0

我通过运行 dropwizard-migrations “fast-forward” 命令解决了这个问题,如下所示:

java -jar hello-world.jar db fast-forward helloworld.yml
Run Code Online (Sandbox Code Playgroud)

这会将下一个变更集标记为已应用,而不实际应用它。对于每个要快进的变更集,您可能必须执行一次此操作。如果你想快进所有内容,还有一个 --all 标志。

更多详细信息可以在这里找到:http ://dropwizard.codahale.com/manual/migrations/