我试图创建一个表(如果不存在)到远程数据库(在docker容器中的postgres)。 sql命令位于sql文件中。 当我执行
mvn liquibase:update
手工(bash终端)一切都很棒。构建成功,并显示创建表的消息。 现在,如果我删除表并执行相同的命令,那么虽然我看到完成任务的成功消息,但是没有创建表(当然也没有显示有关创建表的消息) )。
正如我所提到的,数据库位于docker容器中。所以它是一个远程数据库。我已在pom.xml
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
为什么会这样?
答案 0 :(得分:2)
此变更集是否以&#34; runAllways&#34;运行?模式?如果不是,那么当你第一次运行它时,应用更改并记录为应用,并且它根本不会第二次执行(并且运行它的方式没有区别)。
答案 1 :(得分:1)
Liquibase在一个名为DATABASECHANGELOG的单独表中跟踪它所应用的更改。如果您手动删除表(让我们称之为“MyTable”),如上所述,然后重新运行Liquibase,它只是检查DATABASECHANGELOG表以查看提到的更改是否已经运行,如果已经运行,它将不会重新运行它。如果要查看重新创建的表,则必须手动从DATABASECHANGELOG中删除该行,否则(如上面的注释所示)将更改日志中的变更集标记为“runAlways”。通常,您不希望设置runAlways,因为Liquibase会尝试执行创建已存在的表的操作。