database - 由于我必须自己编写迁移脚本,Flyway 能提供什么值(value)?

标签 database database-migration flyway

在我的情况下,我使用一个生成 SQL 语句的工具来包含所有数据库 init/create 语句。 Flyway 如何提供超出我的工具所提供的值(value)?为什么我应该编写手动编码的迁移脚本来使用 Flyway?

最佳答案

上面的问题混合了两个应该分开的东西:数据库创建的概念与迁移的概念混合在一起。

数据库创建

给定一个完整的数据库和一个空的数据库,您可以使用许多工具来生成在不存在任何内容的情况下重新创建完整数据库所需的脚本。用 Flyway 术语来说,您只需创建一个基线。这根本不是迁移的概念。当然,给定一个 V2.0 数据库,您可以看到任何 V1.0 数据库,将其删除,然后安装 V2.0 数据库,但现在您已经丢失了数据。

迁移

给定一个完整的数据库V2.0和一个V1.0较旧的数据库,并且您希望将V1.0数据库“升级”到V2.0。在数据库领域,这称为迁移,因为现有的 1.0 数据需要以适用于 V2.0 的方式重新排列。现在您需要一个不仅创建/更改表的脚本,还需要一个执行一些 ETL 的脚本(提取数据、转换数据以便能够加载到新表结构中、将旧数据库更改为新表结构,然后将数据加载到数据库中)。这可能很重要,也可能很重要,具体取决于情况。您构建脚本来执行此操作,Flyway 将管理执行该脚本。

飞行路线

Flyway 可实现以下功能:

  • 迁移脚本成为软件 Assets 的一部分。它们经过版本控制,以便可以在源代码管理中维护基线/迁移脚本,使迁移成为一项可重复的功能,而不是“一次性”脚本工作。
  • Flyway 在其使用的每个数据库中维护一个元表,以便了解应用了哪些脚本
  • Flyway 可以以完全自动化的方式应用迁移,从而消除手动执行错误
  • Flyway 允许创建迁移脚本作为开发的一部分(就像测试驱动开发使单元测试创​​建成为开发的一个组成部分),以便所有数据库开发都以迁移脚本的形式捕获(而不是像构建迁移脚本那样构建迁移脚本)需要作为“一次性”迁移的一部分。
  • 使用 Flyway 通过单个命令在几秒钟内更新应用程序的任何先前版本是很常见的。它变得如此容易,以至于从旧数据库迁移到新版本的压力消失了,现在,数据库的演变变得容易和平常。

要很好地使用 Flyway,需要更改您的工作流程:每次在开发人员数据库中进行更改时,请将更改放入迁移脚本中,以便您可以针对世界上存在的所有旧数据库版本执行这些更改。这些脚本会被 checkin 您的应用程序的源代码中,从而使迁移成为您的软件 Assets 的一等公民,就像任何其他功能一样。

关于database - 由于我必须自己编写迁移脚本,Flyway 能提供什么值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37007987/

相关文章:

ruby-on-rails - rails 迁移 : Determine what is being used as database

java - FlyWay 版本

php - 在 PHP 中存储密码的哈希值

Sql Server 创建表查询

android - (Android) 房间数据库迁移不改变数据库

java - 使用 Spring Boot 进行 Flyway 修复

mysql - 如何在 Flyway 测试扩展中强制使用方言?

java - 更改抽屉布局项目

database - 数据库内部是如何工作的?

mysql - 数据库设计 : private chat, 群聊和邮件