Xml 如何使用一个前提条件在变更日志的所有变更集上标记“已运行”?
我正在使用liquibase v3.6.3和postgresql v9.4 我有一个包含40多个变更集的变更日志文件。所有这些更改(包括添加表、外键等)都有一个要运行的条件,即检查特定表是否存在(例如,Xml 如何使用一个前提条件在变更日志的所有变更集上标记“已运行”?,xml,liquibase,postgresql-9.4,preconditions,Xml,Liquibase,Postgresql 9.4,Preconditions,我正在使用liquibase v3.6.3和postgresql v9.4 我有一个包含40多个变更集的变更日志文件。所有这些更改(包括添加表、外键等)都有一个要运行的条件,即检查特定表是否存在(例如,myTable)。如果此条件为false,即myTable已存在,则需要将所有更改标记为已执行 我可以对changelog文件的每个更改集执行以下操作,我已经测试并运行了这些更改集: <changeSet> <preConditions onFail="MARK_RAN"
myTable
)。如果此条件为false,即myTable
已存在,则需要将所有更改标记为已执行
我可以对changelog文件的每个更改集执行以下操作,我已经测试并运行了这些更改集:
<changeSet>
<preConditions onFail="MARK_RAN">
<not>
<tableExists tableName="myTable" schemaName="public"/>
</not>
</preConditions>
...my change 1
</changeSet>
<changeSet>
<preConditions onFail="MARK_RAN">
<not>
<tableExists tableName="myTable" schemaName="public"/>
</not>
</preConditions>
...my change 2
</changeSet>
...
<changeSet>
<preConditions onFail="MARK_RAN">
<not>
<tableExists tableName="myTable" schemaName="public"/>
</not>
</preConditions>
...my change n
</changeSet>
…找我的钱1
…找我的钱2
...
…找我的钱
问题是,我需要为每一个更改重复前提条件,重复代码很难是一种好的实践
我可以在changelog文件的末尾添加以下内容:
<preConditions onFail="HALT">
<sqlCheck expectedResult="0"> SELECT COUNT(1) FROM pg_tables WHERE TABLENAME = 'myTable' </sqlCheck>
</preConditions>
从pg_表中选择计数(1),其中TABLENAME='myTable'
这将阻止执行整个changelog文件,这是我想要的结果之一。但我还需要将更改标记为已执行,而sqlCheck不会这样做
有没有办法只添加一次带有“MARK_RAN”的前置条件,并将其应用于changelog文件中的所有更改集?
我在网上找不到这样的东西
欢迎使用其他类型的不带前置条件的解决方案,这些解决方案也会将更改标记为已执行。这可能有点困难,但可能比将所有前置条件添加到更改日志中要好 首先对干净的数据库运行
updateSQL
命令。这将生成应用于数据库以部署所有变更集的所有SQL。在生成的SQL文件中,将有一组对DATABASECHANGELOG表的insert语句
将所有这些insert语句提取到单个文件中。将其称为“MarkAllMyTableRelatedAsRan.sql”,然后在第一个变更集中使用
标记运行这些插入,使用前提条件