【问题标题】:Liquibase - Generating Change LogsLiquibase - 生成更改日志
【发布时间】:2020-02-16 03:31:27
【问题描述】:

我希望 Liquibase 从此数据库“测试”中生成更改日志。有可能吗?

我已经有一个现有的数据库,里面有它的表和数据。

jdbc:mysql://localhost:3306/testing

现在,我希望 Liquibase 从这个数据库“测试”中生成更新日志。有可能吗?

这是我的命令,但它不起作用。

liquibase --driver=com.mysql.jdbc.Driver --classpath=C:\mysql-connector-java-5.1.47.jar 
--changeLogFile=C:\db.changelog.xml --url="jdbc:mysql://localhost:3306/testing"
--username=root generateChangeLog

我不使用任何密码。

错误与--changeLogFile=C:\db.changelog.xml有关

我想,Liquibase 会引用我的 DB 'testing',并在文件夹 C 中生成名为 'db.changelog.xml' 的更改日志。

我错了哪一部分?我错过了什么吗?

或者,Liquibase 不打算从现有数据库生成更改日志?

或者,Liquibase 的目的是仅从变更日志生成数据库?反之亦然?

【问题讨论】:

  • 这是可能的。您可能会遇到麻烦,因为您正在写入 c: 驱动器根目录中的文件。请改用c:\temp\changelog。请记住,每次运行脚本时,您都需要有一种方法来增加更改日志。我不记得它是通过将日志写入它读取的数据库来做到这一点,还是需要以前的更改日志文件...
  • @JoSSte 谢谢,它有效。抱歉,我不明白这部分“每次运行脚本时增加变更日志的方法” - 为什么我们需要增加变更日志
  • 我将尝试详细说明完整的答案

标签: liquibase liquibase-hibernate liquibase-sql


【解决方案1】:

这是可能的。您可能会遇到麻烦,因为您正在写入 c: 驱动器根目录中的文件。改用 c:\temp\changelog。

我的经验是 liquibase 以增量方式工作。因此,如果您在数据库上运行该命令,它将生成一个文件,就好像数据库中的所有内容都必须在更改日志文件中创建一样(好像从一个完全空的数据库开始)。

如果您阅读the text on Liquibase's site regarding this command,它会说:

当开始在现有数据库上使用 Liquibase 时,有一种方法可以生成更改日志以创建当前数据库架构,这通常很有用,特别是对于测试而言。

这意味着如果你对你的开发数据库执行一次这个命令,对一个新的数据库运行结果(比如说测试),在你的开发数据库上再次运行它,然后对你的测试数据库运行那个文件,你会得到大量错误表明函数已经存在。

我认为这背后的想法是您在更改日志文件中创建新条目并针对您的所有数据库执行它们,而不是使用其他工具并使用 liquibase 进行增量。

【讨论】:

  • 你的意思是,如果我们使用生成的changelog,在同一个服务器上生成不同名称的数据库,或者在另一个服务器上生成同名的数据库,它会报错?那么,为了解决错误,我们应该在更改日志文件中创建新条目吗?对不起,我也不明白,与此变更日志相关的“条目”是什么意思?你的意思是我们必须重命名变更日志,或者在变更日志中为每个变更集赋予新的 ID?
  • 我的意思是您必须手动将条目插入更改日志。而不是做 alter table YY add column xx int 将变更集添加到变更日志 <changeSet author="liquibase-docs" id="addColumn-example"> <addColumn catalogName="cat" schemaName="public" tableName="YY"> <column name="xx" type="varchar(255)"/> </addColumn> </changeSet>
猜你喜欢
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
相关资源
最近更新 更多