【问题标题】:Liquibase force run alwaysLiquibase force 始终运行
【发布时间】:2018-06-27 17:24:53
【问题描述】:

我正在使用 Liquibase 应用数据库更改。在某些时候,我删除了数据库中的所有内容,然后尝试让 Liquibase 重新运行更改日志。

我的“主”更改日志文件如下所示:

databaseChangeLog:
- include:
    relativeToChangelogFile: true
    file: db.changelog-diff-20180620-1733.yaml

而 db.changelog-diff-20180620-1733.yaml 看起来像这样:

databaseChangeLog:
- changeSet:
    runAlways: true
    id: 1529512411141-1
    author: XXXXXX (generated)
    changes:
    - createSequence:
        sequenceName: hibernate_sequence
  1. 我想我可以通过将 runAlways 设置为 true 来让 Liquibase 重新运行 db.changelog-diff-20180620-1733.yaml。 Liquibase 仍然不会运行更改日志。
  2. 然后我尝试删除表 databasechangelog 中的所有条目。那也不行。
  3. 尝试使用 clearCheckSums 命令运行 Liquibase。

这些都不起作用。

我正在通过 Gradle 运行 Liquibase。以下是任务:

task liquibaseDiffChangelog(type: JavaExec) {
    group = "liquibase"

    classpath sourceSets.main.runtimeClasspath
    classpath configurations.liquibase
    main = "liquibase.integration.commandline.Main"

    args "--changeLogFile=" + "$projectDir/src/main/resources/db/changelog/db.changelog-diff-" + buildTimestamp() + ".yaml"
    args "--referenceUrl=hibernate:spring:uk.xxx.xxxxx.xxxxxx.coh.domain?dialect=org.hibernate.dialect.PostgreSQL94Dialect"
    args "--username=" + liquibaseProps.getProperty('username')
    args "--password=" + liquibaseProps.getProperty('password')
    args "--url=" + liquibaseProps.getProperty('url')
    args "--driver=" + liquibaseProps.getProperty('driver')
    args "diffChangeLog"
}

task migratePostgresDatabase(type: JavaExec) {
    group = "liquibase"

    classpath sourceSets.main.runtimeClasspath
    classpath configurations.liquibase
    main = "liquibase.integration.commandline.Main"

    def urlString = project.hasProperty("dburl") ? "jdbc:postgresql://$dburl" : liquibaseProps.getProperty('url')
    def user = project.hasProperty("flyway.user") ? "${rootProject.properties['flyway.user']}" : liquibaseProps.getProperty('username')
    def password = project.hasProperty("flyway.password") ? "${rootProject.properties['flyway.password']}" : liquibaseProps.getProperty('password')

    args "--changeLogFile=./src/main/resources/db/changelog/db.changelog-master.yaml"
    args "--username=$user"
    args "--password=$password"
    args "--url=$urlString"
    args "--driver=" + liquibaseProps.getProperty('driver')
    args "update"
}

有人知道我可以如何强制 Liquibase 重新运行变更日志吗?

【问题讨论】:

  • 你是如何运行 liquibase 的?
  • 从 gradle 运行。为了清楚起见,我现在已将 gradle 任务添加到原始问题中
  • 你有任务的输出吗?
  • databasechangelog 表是 liquibase 用来跟踪已运行的中心点。如果您删除/清空它,liquibase 必须认为您的任何更改都未应用并再次执行所有更改。所以这应该有效。也许您在不同的架构中删除了错误的 databasechangelog 表?再次运行 liquibase 后表格是否已填满?

标签: liquibase


【解决方案1】:

感谢所有回复。我最终放弃了这个。我炸毁了数据库,然后重新运行了 Gradle liquibaseDiffChangelog 任务,基本上得到了一个干净的数据库构建更改日志。

所以我看起来像这样,即我的主更改日志文件中只有一个更改日志文件:

databaseChangeLog:
- include:
    relativeToChangelogFile: true
    file: db.changelog-diff-20180627-2001.yaml

这样似乎不那么麻烦了。

再次感谢大家的回复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2020-02-05
    • 2018-05-14
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多