Postgresql 液化先决条件不起作用

Postgresql 液化先决条件不起作用,postgresql,liquibase,Postgresql,Liquibase,我正在尝试使用liquibase跟踪使用dropwizard迁移对postgresql数据库的更改。我希望能够在现有生产数据库上运行迁移,而不是从头开始重建。现在我正在进行阶段性测试。我已经创建了一个带有前提条件的变更集 <changeSet id="3" author="me"> <preConditions onFail="CONTINUE"> <not> <sequenceExists sequenc

我正在尝试使用liquibase跟踪使用dropwizard迁移对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>

我试着用MARK_-RAN代替CONTINUE。这可不是什么好事。

将变更集应用于现有数据库而无需执行的更简单方法是使用命令

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

liquibase --changeLogFile=mydb.xml generateChangeLog
liquibase --changeLogFile=mydb.xml changelogSync
liquibase --changeLogFile=mydb.xml update
sync命令所做的是创建changelog表中的所有条目,以便liquibase文件现在可以正常用于更新数据库:

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

我做了与您希望对视图所做的相同的操作,对我来说,它是有效的:

也许会给你一些想法:

<changeSet author="e-ballo" id="DropViewsAndcreateSynonyms" context="dev,int,uat,prod">
    <preConditions onFail="CONTINUE" >
        <viewExists viewName="PMV_PACKAGE_ITEMS" schemaName="ZON"/>
        <viewExists viewName="PMV_SUBSPLAN_INSTALLTYPES" schemaName="ZON"/>
    </preConditions>
    <dropView schemaName="ZON" viewName="PMV_PACKAGE_ITEMS"  />
    <dropView schemaName="ZON" viewName="PMV_SUBSPLAN_INSTALLTYPES"  />
    <sqlFile path="environment-synonyms.sql" relativeToChangelogFile="true" splitStatements="true" stripComments="true"/>
</changeSet>


我希望它能有所帮助

我通过运行dropwizard迁移“快进”命令解决了这个问题,如下所示:

java -jar hello-world.jar db fast-forward helloworld.yml
这会将下一个变更集标记为已应用,而不会实际应用它。对于要快速前进的每个变更集,您可能必须执行此操作一次。如果您想快速推进所有内容,还有一个--all标志


更多详细信息可在此处找到:

我使用sqlCheck指令解决了此问题:

<changeSet id="sys-0" context="structural">
    <preConditions onFail="MARK_RAN"><sqlCheck expectedResult="0">SELECT count(c.relname) FROM pg_class c WHERE c.relkind = 'S' and c.relname = 'hibernate_sequence'</sqlCheck></preConditions>
<!--        <preConditions><not><sequenceExists schemaName="public" sequenceName="hibernate_sequence"/></not></preConditions> -->
    <createSequence schemaName="public" sequenceName="hibernate_sequence"/>
</changeSet>

从pg_类c中选择count(c.relname),其中c.relkind='S'和c.relname='hibernate_sequence'

(在liquibase 2.0.1版本上测试)

我想使用dropwizard迁移模块来完成这项工作@我没有使用dropwizard,但我的理解是它包装了liquibase。在这种情况下,使用liquibase命令行运行changelogsync命令,这将使数据库中的changelog表保持最新。然后,您将能够执行正常迁移。遗憾的是,该命令不在dropwizard迁移api中:错误:无效选择:“changelogSync”(从“计算校验和”、“清除校验和”、“全部删除”、“转储”、“快进”、“生成文档”、“锁”、“迁移”、“准备回滚”、“回滚”、“状态”、“标记”、“测试”中选择)看起来我需要使用dropwizard migrations“fast forward”命令更新现有数据库。感谢您的帮助:)