当前位置: 首页 > 面试题库 >

Flyway或Liquibase可以生成更新脚本而不是直接更新数据库吗?

拓拔曦
2023-03-14
问题内容

首先,有一点背景。我有一套Java应用程序,有些基于JPA,有些则没有。为了创建数据库,我目前正在使用Hibernates模式导出来为使用JPA的用户生成创建脚本。那些不使用JPA的人会手工生成脚本。然后使用ANT在应用程序安装过程中运行它们。对于更新,应用程序安装程序只需将更新脚本应用于数据库。

为了改善数据库更新的管理,我一直在研究Flyway和Liquibase。两者似乎几乎都可以满足我的要求(此外:由于我们拥有的所有预先存在的SQL /
DDL脚本,目前我更喜欢Flyway)。我可以看到的问题是它们都直接更新数据库。这对于很多安装都很好,但不是全部。

我想做的是针对数据库运行Flyway / Liquibase,并生成一个更新脚本,其中包含使数据库保持最新状态所需的所有更新-包括Flyway /
Liquibase需要对其自己的表进行的任何更改。这将允许我(或更重要的是数据库管理员)在应用程序外部运行更新脚本以更新数据库。然后,我可以在应用程序中纯粹使用Flyway
/ Liquibase来验证数据库是否最新。

是否可以使用Flyway或Liquibase或任何其他工具来做到这一点?


问题答案:

Liquibase处理得很好。它以当前状态查看数据库,查找未应用的变更集,并update在sql输出模式下使用命令生成SQL脚本。

无论如何,使用适当的数据库迁移工具代替Hibernate
generator是最好的选择,迟早您会遇到Hibernate不支持的情况。对我们来说,它正在删除一个唯一索引,并用另一个索引代替它。您还可以使hibernate.hbm2ddl.auto=validate自己对数据库结构和实体Bean之间的兼容性感到放心。



 类似资料:
  • 首先,一点背景。我有一组Java应用程序,有些基于JPA,有些不是。要创建我的数据库,我目前正在使用Hibernates模式导出为那些使用JPA的人生成创建脚本。那些不使用JPA的人我手动生成脚本。然后在应用程序安装期间使用ANT运行这些脚本。对于更新,应用程序安装程序只需将更新脚本应用于数据库。 为了改进数据库更新的管理,我一直在研究Flyway和Liquibase。这两个脚本似乎几乎都能满足我

  • 我们仍处于项目的早期阶段,我们正在构建一个包含多个表的数据库。列出的两个工具都允许我们创建一些DDL / DML文件并跟踪对数据库的更改。无论如何,当结构仍未合并时,这可能会很麻烦。 假设我想添加一个新列,甚至删除一个表:在这两个程序中,我都必须使用ALTER TABLE/etc.命令创建一个新脚本并记录更改。 在terraform中,您只需编写所需的基础设施,当您通过删除节点来更改文件时,该工具

  • 我有一个Gradle脚本,它使用flyway插件来创建一些数据库表,现在我需要更新该脚本,以便它可以与两组单独的flyway脚本一起工作,每个脚本更新一个单独的数据库。 在单数据库版本的脚本中,我只是这样做: 我一直在尝试声明一个新任务来运行第二个数据库的脚本: 我的Gradle技能很差,但我知道这不是正确的方法——我的理解是块会覆盖原始flyway配置,所以如果我想在之后运行,它会继续使用第二组

  • 在我目前的项目中,有一个数据库团队在将它们应用到生产环境之前检查所有脚本。 我们使用Liquibase将变更集应用到开发中,但是对于生产,我们需要能够生成一个*。包含所有语句的sql文件。 根据液基-专家-插件的文档,updateSQL应该是我想要的:http://www.liquibase.org/documentation/maven/maven_updatesql.html。 所以我创建了两

  • 我想为现有的应用程序使用flyway。 应该有两种不同的情况: 1)应用程序安装:DDL和数据库初始化 2) 应用程序更新:迁移数据库 问题是如果我安装版本6.0,我有例如: 如果我将init version设置为V1.0.0,它将执行直到V6_0_0的所有更新,但是在数据库初始化之后,它将跳过所有更新。 要安装一个旧的shema,这样我就可以使用所有udpate脚本,即使对于全新安装也会非常困难

  • 本文向大家介绍Python 实现数据库更新脚本的生成方法,包括了Python 实现数据库更新脚本的生成方法的使用技巧和注意事项,需要的朋友参考一下 我在工作的时候,在测试环境下使用的数据库跟生产环境的数据库不一致,当我们的测试环境下的数据库完成测试准备更新到生产环境上的数据库时候,需要准备更新脚本,真是一不小心没记下来就会忘了改了哪里,哪里添加了什么,这个真是非常让人头疼。因此我就试着用Pytho