database - 为什么 Liquibase generateChangeLog 会生成一个空的 changelog 文件?
问题描述
我正在使用 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 头文件)。
我尝试使用不同的 url(文件中的 h2),我尝试设置不同的密码和用户名,我什至尝试定义 defaultSchemaName 参数,但仍然相同。Liquibase maven 插件说:未找到更改,无事可做 没有 maven 插件的 Liquibase 说:Liquibase 命令“generateChangeLog”已成功执行。
我还尝试输入无效凭据(用户名或密码),但仍然相同。
解决方案
generateChangeLog
命令从指定的数据库中导出数据。这意味着应该存在这样的数据库并填充一些数据。
此处没有必要指定内存中嵌入的 URL jdbc:h2:mem:testdb
。每个进程都有自己的内存和自己的内存数据库。Liquibase 肯定会在它自己的内存中看到一个空数据库。
您需要使用您的应用程序创建一个普通的持久性数据库,并在此处使用其 URL。我强烈建议您在数据库 URL 中指定绝对数据库路径(不带文件扩展名),以确保您的应用程序和 Liquibase 将使用相同的数据库。请注意,如果没有附加参数(自动服务器模式),您不能同时由两个应用程序使用嵌入式数据库,因此您需要在启动 Liquibase 之前关闭应用程序中的数据库。作为替代方案,您可以启动 H2 服务器进程并使用远程 URL,或者您可以使用自动服务器模式。
您也可以;IFEXISTS=TRUE
仅附加到 Liquibase 的数据库 URL。它将防止在其中意外地静默创建新的空数据库。
推荐阅读
- scipy - 从另一个文件导入 scipy 时,我在实现用于 scipy 的最小平方优化的残差函数时遇到问题
- python - python 数学,我如何获得 2 个完整的盒子和 9 个部分的苹果问题
- android - 如何优化火箭的运动?
- android-notification-action - android,在什么情况下操作系统会在通知中创建动作按钮
- python-3.x - Pandas 查找带有关键字和括号的文本
- ionic-framework - 在设备上运行离子/电容器应用程序的命令是什么,并针对 android 和 ios 进行实时重新加载
- azure-devops - Azure DevOps Boards - 允许用户添加选项列表值?
- sparql - 获取每个属性的不同值的平均数量
- c# - 使用 Chrome 内置 PDF 阅读器的 TypeScript
- math - 可以使用数学缩短 17 位小数