第二次尝试 Liquibase maven 更新失败
Liquibase maven update fails on second attempt
我正在尝试为远程数据库(docker 容器中的 postgres)创建一个 table(如果不存在)。 sql 命令位于 sql 文件中。
当我执行
mvn liquibase:update
手动(bash 终端)一切正常。构建成功,并显示创建 table 的消息。
现在,如果我删除 table 并执行相同的命令,那么虽然我看到任务完成的成功消息,但不会创建 table (当然是关于创建的消息table 也不显示)。
正如我提到的,数据库位于 docker 容器中。所以它是一个远程数据库。我已经在 pom.xml
中包含了以下命令
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
为什么会这样?
Liquibase 在名为 DATABASECHANGELOG 的单独 table 中跟踪它应用的更改。如果您如上所述手动删除 table(我们称之为 "MyTable"),然后删除 re-run Liquibase,它只会检查 DATABASECHANGELOG table 以查看是否提到了更改已经运行,如果有,就不会re-run了。如果您想看到 table 得到 re-created,您必须手动从 DATABASECHANGELOG 中删除该行,否则(如上面的评论所建议的那样)将变更日志中的变更集标记为 "runAlways"。通常你不希望 运行Always 被设置,因为这样 Liquibase 会尝试做一些事情,比如创建一个已经存在的 table。
此变更集 运行 是否具有 "runAllways" 模式?如果不是,那么当您 运行 第一次应用更改并记录为已应用时,它根本不会执行第二次(并且您 运行 宁它的方式没有区别)。
我正在尝试为远程数据库(docker 容器中的 postgres)创建一个 table(如果不存在)。 sql 命令位于 sql 文件中。 当我执行
mvn liquibase:update
手动(bash 终端)一切正常。构建成功,并显示创建 table 的消息。 现在,如果我删除 table 并执行相同的命令,那么虽然我看到任务完成的成功消息,但不会创建 table (当然是关于创建的消息table 也不显示)。
正如我提到的,数据库位于 docker 容器中。所以它是一个远程数据库。我已经在 pom.xml
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
为什么会这样?
Liquibase 在名为 DATABASECHANGELOG 的单独 table 中跟踪它应用的更改。如果您如上所述手动删除 table(我们称之为 "MyTable"),然后删除 re-run Liquibase,它只会检查 DATABASECHANGELOG table 以查看是否提到了更改已经运行,如果有,就不会re-run了。如果您想看到 table 得到 re-created,您必须手动从 DATABASECHANGELOG 中删除该行,否则(如上面的评论所建议的那样)将变更日志中的变更集标记为 "runAlways"。通常你不希望 运行Always 被设置,因为这样 Liquibase 会尝试做一些事情,比如创建一个已经存在的 table。
此变更集 运行 是否具有 "runAllways" 模式?如果不是,那么当您 运行 第一次应用更改并记录为已应用时,它根本不会执行第二次(并且您 运行 宁它的方式没有区别)。