为什么 Liquibase generateChangeLog 会生成一个空的变更日志文件?

Why does Liquibase generateChangeLog generate an empty changelog file?

我正在使用 Liquibase 从现有的 H2 数据库生成数据库方案。 我使用以下内容:

liquibase  --driver=org.h2.Driver --classpath=./h2-1.4.199.jar --changeLogFile=db.schema.sql --url="jdbc:h2:mem:testdb" --username=sa --password= --logLevel=debug generateChangeLog

因此,为了连接到 H2 实例,绝对使用默认值。但是上面的命令生成了一个空的变更日志文件(只是一些基本的 Liquibase headers)。

我尝试使用不同的 url(文件中的 h2),我尝试设置不同的密码和用户名,我什至尝试定义 defaultSchemaName 参数,但还是一样。 Liquibase maven 插件说:没有发现任何变化,无事可做 没有 maven 插件的 Liquibase 说:Liquibase 命令 'generateChangeLog' 已成功执行。

我也试过输入无效的凭据(用户名或密码),但还是一样。

generateChangeLog 命令从指定的数据库导出数据。这意味着这样的数据库应该存在并填充一些数据。

此处没有必要指定内存中嵌入 URL jdbc:h2:mem:testdb。每个进程都有自己的内存和自己的内存数据库。 Liquibase 肯定会在自己的内存中看到一个空数据库。

您需要为您的应用程序创建一个普通的持久数据库,并在此处使用它的 URL。我强烈建议您在数据库 URL 中指定绝对数据库路径(不带文件扩展名),以确保您的应用程序和 Liquibase 使用相同的数据库。请注意,如果没有附加参数(自动服务器模式),您不能同时由两个应用程序使用嵌入式数据库,因此您需要在启动 Liquibase 之前关闭应用程序中的数据库。作为替代方案,您可以启动 H2 服务器进程并使用远程 URLs 或者您可以使用自动服务器模式。

您还可以将 ;IFEXISTS=TRUE 附加到数据库 URL 中,仅适用于 Liquibase。它将防止在其中意外地静默创建一个新的空数据库。