我正在尝试为远程数据库(docker容器中的postgres)创建一个表(如果不存在)。sql命令位于sql文件中。当我执行时
mvn liquibase:update
手动(bash终端)一切都很好。构建成功,并显示创建表的消息。现在,如果我删除该表并执行相同的命令,那么尽管我看到了任务完成的成功消息,但该表并没有创建(当然,也没有显示关于创建该表的消息)。
正如我所提到的,数据库位于docker容器中。所以它是一个远程数据库。我已经在我的pom.xml
中包含了以下命令
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
为什么会发生这种情况?
此变更集是否以"runAllways"模式运行?如果不是,则与您运行它时相比,第一次更改被应用并记录为已应用,第二次根本不执行(运行方式没有区别)。
Liquibase在一个名为DATABASECHANGELOG的单独表中跟踪其应用的更改。如果你如上所述手动删除表(让我们称之为"MyTable"),然后重新运行Liquibase,它只会检查DATABASECHANGELOG表,看看上面提到的更改是否已经运行,如果已经运行,它不会重新运行。如果你想看到表被重新创建,你必须手动从DATABASECHANGELOG中删除行,或者(如上面的注释所示)将变更日志中的变更集标记为"runAlways"。通常,您不希望设置runAlways,因为Liquibase会尝试创建一个已经存在的表。