首页 > 解决方案 > 使用 Flyway 时如何正确更改数据库结构?

问题描述

例如,我有V1__InitScript.sql带有查询的脚本:

create table if not exists users
(
  guid varchar(36) not null primary key,
  name varchar(255) not null,
  description varchar(500)
);

我在 clear DB 上启动我的应用程序,然后 flyway 运行此脚本。现在我有名称users和 3 列的空表。我开始工作,我需要添加一列,例如age。我应该怎么办?

1)我可以将此列添加到表中。然后将此查询添加到V2__Add_column.sql. 但是当我启动应用程序 flyway 时,尝试制作这个 V2 脚本,因为它不存在于flyway_schema_history表中。

2)当我想添加一列时,我立即用flyway. 但是当我进行主动开发时,我经常可以更改数据。所以我必须flyway为每一次改变而奔跑?

更改数据库的结构,并将脚本收集在单独的文件中似乎是合理的。并且在准备新版本时,将所有必要的脚本添加到flyway. 但是我怎么能在我的开发者机器上呢?还是我不需要flyway在我的机器上运行,而只需要在测试和生产中运行?

还有另一个问题 - 如果所有开发人员的工作都使用相同的基础完成,如何正确构建流程。即开发者电脑上没有本地数据库

标签: springspring-bootdatabase-migrationflyway

解决方案


对我来说,最方便的方法是拥有一个开发数据库,​​它不由 Flyway 填充,可以随时手动修改,还有一些用于测试的数据库,仅由 Flyway 填充,从不手动填充,用于任何测试目的(包括测试自动化)。当然,Flyway 应该在生产中使用。

这样,您可以在开发过程中自由修改数据库,并且仍然可以在部署中使用 Flyway 的所有优势。


推荐阅读