Liquibase 先决条件不起作用

2024-01-09

我正在尝试使用 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>

我的目标是如果序列已经存在,则跳过应用变更集。看似简单,但行不通。

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

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


将变更集应用到现有数据库(无需执行)的一种更简单的方法是使用变更日志同步 http://www.liquibase.org/documentation/command_line.html命令。

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

liquibase --changeLogFile=mydb.xml generateChangeLog
liquibase --changeLogFile=mydb.xml changelogSync

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

liquibase --changeLogFile=mydb.xml update
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Liquibase 先决条件不起作用 的相关文章

随机推荐