【问题标题】:Why does liquibase not create the tables but it creates the changelog?为什么 liquibase 不创建表而是创建变更日志?
【发布时间】:2022-12-10 12:40:21
【问题描述】:

我有以下 Maven 配置:

    <profile>
      <id>liquibase-default</id>
      <activation>
        <property>
          <name>!updateSQL</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-maven-plugin</artifactId>
            <configuration>
              <changeLogFile>src/main/database/releases.xml</changeLogFile>
              <driver>oracle.jdbc.driver.OracleDriver</driver>
              <url><url></url>
              <username><user></username>
              <password><pw></password>
              <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
            </configuration>
            <executions>
              <execution>
                <phase>process-resources</phase>
                <goals>
                  <goal>changelogSync</goal>
                  <goal>update</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

一旦在空数据库上运行,就会创建两个表:

  • 数据库变更日志
  • 数据库更改日志锁

但是应该创建的实际表不存在。 所有的创建语句都写在DATABASECHANGELOG中 就好像 liquibase 创建了它们,但它们并没有被创建。

如何告诉 liquibase 创建表?

【问题讨论】:

    标签: maven liquibase


    【解决方案1】:

    请尝试(更好):

    <changeLogFile>database/releases.xml</changeLogFile>
    

    或者:

    ${project.build.outputDirectory}/database/releases.xml
    

    分别完整路径。

    自从:

    从 Maven 插件的 1.6.1.0 版开始,所有文件都从 Maven 项目的 Maven 测试类路径或绝对路径解析。这允许您的更改日志出现在其他 Maven 工件中(在类路径上)并用于在数据库上调用 Liquibase。

    参考:https://docs.liquibase.com/tools-integrations/maven/using-liquibase-and-maven-pom-file.html

    maven-resources-plugin应该做它的 (process-resources: filter&copy) 工作,liquibase 插件。

    如果在某些情况下不是这种情况(文件不在目标/类中),我们可以:

    • 通过 pom(出现顺序)命令插件执行。
    • 或者(只是)稍后做 liquibase &lt;phase/&gt;

    【讨论】:

    • 但如果我是对的,我希望它会失败构建;(
    【解决方案2】:

    我不熟悉 Maven,但你在“目标”部分列出了两个 Liquibase 命令:

    changelog同步和更新

    由于首先列出了 changelogSync 命令,因此我假设它将首先执行。此命令将获取 releases.xml 变更日志中列出的所有变更集,并将它们插入到 databasechangelog 表中,使其看起来像 Liquibase 将它们应用到您的数据库,即使实际上没有。因此,当更新命令执行时,没有“待定”变更集应用于您的数据库。

    https://docs.liquibase.com/commands/change-tracking/changelog-sync.html

    【讨论】:

      猜你喜欢
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-06
      • 2020-12-28
      • 2013-06-01
      • 1970-01-01
      相关资源
      最近更新 更多