【发布时间】: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
- 我想我可以通过将 runAlways 设置为 true 来让 Liquibase 重新运行 db.changelog-diff-20180620-1733.yaml。 Liquibase 仍然不会运行更改日志。
- 然后我尝试删除表 databasechangelog 中的所有条目。那也不行。
- 尝试使用 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