liquibase - Flyway 或 LiquiBase 可以在当前数据库和最新迁移之间进行区分吗?
问题描述
我想保持以数据库为中心的开发过程,其中数据库及其数据为王。我想先在数据库中迭代更改,在数据库工具中播放。
一旦我对架构更改感到满意,我就会转向 Java 端,并希望使用 DB 迁移来保持一切同步。
鉴于上述情况,我可以做些什么来启用数据库中的迭代然后提取迁移。我需要在整个项目生命周期中重复这个过程。是否有工具可以区分当前数据库状态和最新迁移?
我更喜欢 Flyway 以 SQL 为中心,但我之前使用过 LiquiBase,如果它支持我的工作流程,我会使用它。
更新:当然我应该问我是否可以做一些其他的过程?我可以运行 2 个 DB,1 个由 Flyway/LiquiBase 管理,另一个由我的游戏围栏管理,并在它们之间做某种差异。
解决方案
Liquibase 无法在更改日志文件和数据库之间进行“差异”,但它可以执行“updateSql”命令,该命令将输出将数据库从当前状态迁移到更改日志所期望的状态所需的 SQL,而无需实际进行任何更改。
对于您正在查看的工作流程,最好的方法是对数据库进行更改并在更新的数据库和从起始更改日志中新更新的单独数据库之间运行 diffChangeLog。Datical在 Liquibase之上进行了一些增强,以更好地支持这种类型的工作流程。
但是,我确实倾向于建议在更改日志文件本身中迭代您的更改:附加一个更改集,运行 liquibase 更新,确保您的更改是好的,回滚并尝试不同的东西,如果不是,否则重复。
通过开始更改日志中的更改,您知道最终将应用的更改正是您所做的更改。任何基于差异的操作都会尝试恢复您最初所做的,但可能并不总是完全正确。
注意:如果您更喜欢编写 SQL 而不是 XML、JSON 或 YAML,Liquibase 确实支持格式化的 sql更改日志文件。
推荐阅读
- xbox - 如何通过 Microsoft 进行身份验证并检索游戏成就?
- css - 如何使用css突出显示选定的文本?
- wpf - WPF 样式中的数据触发器:更改内容不起作用
- python - 使用 Peewee 选择()数据的最快和最节省内存的方法?
- html - 跨度标记中的 HTML 图像在底部对齐
- javascript - rxjs Observable 合并没有按预期工作
- xamarin - Debug.WriteLine(ex); 是否有任何性能损失?当我的应用程序发布版本时声明
- swift - 将 NSTableView 保存为 PDF 时如何包含表头
- c# - ProjectionManager.StartProjectingAsync - 引发拒绝访问异常
- libgdx - Drawable 接口的 setMinWidth() 方法有什么用?