Liquibase未按依赖关系顺序执行变更日志文件

时间:2019-09-13 06:14:52

标签: liquibase dbmigrate

我们的项目有多个模块。我们为每个模块创建了 databasechangelog 文件。 Liquibase是按字母顺序而不是模块依赖性顺序执行这些文件的。 例如

Project
 |
 Module1
 |
 | - domain
 |   | - foo1
 |  
 | - Changelogfile1.xml  
 Module2
 |
 | - domain
 |   | - foo2
 |   
 | - Changelogfil2.xml
 Module3
 |
 | - domain
 |   | - foo3
 | 
 | - Changelogfile3.xml

我的master.xml文件如下所示

...
<includeAll path="classpath*:${path}/x.x.x"/>
...
  1. Changelogfile1.xml包含foo1表创建更改集信息及其约束定义更改集
...
<changeSet author="****" id="1">
 <createTable tableName="foo1">
    <column name="id" type="BIGINT">
    ...
     <column name="foo2_id" type="INT">
     ...
  </createTable>
</changeSet>
....
<addForeignKeyConstraint baseColumnNames="foo2_id" baseTableName="foo1"
constraintName="name" deferrable="false" initiallyDeferred="false" 
referencedColumnNames="id" referencedTableName="foo2"/>
....
...
  1. Changelogfile2.xml包含foo2表创建更改集信息及其约束定义更改集
...
<changeSet author="****" id="1">
 <createTable tableName="foo2">
    <column name="id" type="BIGINT">
     ...
     ...
     ...
  </createTable>
</changeSet>
  1. Changelogfile3.xml包含foo3表创建更改集信息及其约束定义更改集
  2. 此处Module1取决于Module2。表foo1与foo2表具有 OnetoOne 关系

Liquibase按以下顺序执行了更改日志文件

  1. Changelogfile1
  2. Changelogfile2
  3. Changelogfile3

我希望liquibase应该按以下顺序执行

  1. Changelogfile2
  2. Changelogfile1
  3. Changelogfile3

liquibase是否有任何选项将按照其依赖顺序执行数据库变更日志文件?

2 个答案:

答案 0 :(得分:0)

否,Liquibase无法确定变更集的“正确”顺序。这取决于用户以正确的顺序放置它们。

有几种技术可以做到这一点。许多人只有一个df['index'].str.replace('bs\(np.clip\(', '').str.replace(', 0, np.inf\), degree=1, knots\=\[', '').str.replace('[,\.\)\[\]!?0-9]', '').str.strip(),其中包含所有变更集。其他人将只有一个包含其他变更日志的主变更日志文件,然后他们将使用文件命名约定,其中前3个或4个字符是数字,例如changelog.xml,然后是0001_add_customer_table.xml。如果使用这样的约定,则可能要使用以“ 0010”开头的“跳过编号”,然后是0020、0030等,这样(希望)在极少数情况下,您需要在另外两个之间插入变更集变更集,例如,您将有空间添加0015。

答案 1 :(得分:0)

使用includeAll时会发生这种情况,为避免此类问题,我添加了所有文件,并按所需顺序将其包含在内,从而解决了该问题。

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.2.xsd">

<include file="db/changelog/changes/version/db.changelog.test-v1.sql"/>
<include file="db/changelog/changes/version/db.changelog.test-v2.sql"/>
<include file="db/changelog/changes/version/db.changelog.test-v3.sql"/>
<include file="db/changelog/changes/version/db.changelog.test-v4.sql"/>
<include file="db/changelog/changes/version/db.changelog.test-v5.sql"/>
<include file="db/changelog/changes/version/db.changelog.test-v6.sql"/>
<include file="db/changelog/changes/version/db.changelog.test-v7.sql"/>
<include file="db/changelog/changes/version/db.changelog.test-v8.sql"/>
<include file="db/changelog/changes/version/db.changelog.test-v9.sql"/>
<include file="db/changelog/changes/version/db.changelog.test-v10.sql"/>
<include file="db/changelog/changes/version/db.changelog.test-v11.sql"/>
<include file="db/changelog/changes/version/db.changelog.test-v12.sql"/>
<include file="db/changelog/changes/version/db.changelog.test-v13.sql"/>
<include file="db/changelog/changes/version/db.changelog.test-v14.sql"/>
<include file="db/changelog/changes/version/db.changelog.test-v15.sql"/>
<include file="db/changelog/changes/version/db.changelog.test-v16.sql"/>