spring - 使用 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
在我的机器上运行,而只需要在测试和生产中运行?
还有另一个问题 - 如果所有开发人员的工作都使用相同的基础完成,如何正确构建流程。即开发者电脑上没有本地数据库
解决方案
对我来说,最方便的方法是拥有一个开发数据库,它不由 Flyway 填充,可以随时手动修改,还有一些用于测试的数据库,仅由 Flyway 填充,从不手动填充,用于任何测试目的(包括测试自动化)。当然,Flyway 应该在生产中使用。
这样,您可以在开发过程中自由修改数据库,并且仍然可以在部署中使用 Flyway 的所有优势。
推荐阅读
- javascript - 在网页中结合 HTML 和 React
- node.js - 如何从输入名称字段而不是NodeJS中的数组获取单个值
- sql - 获取“最近的”分组记录(按顺序排列)
- node.js - Firebase 功能中的白名单域
- oracle - 在 Dockerfile 中配置 oracle XE 18c
- javascript - 如何在嵌套数组javascript中进行排序
- python - 字典中的值并不总是被替换
- reactjs - 在反应打字稿功能组件中移动到另一个组件时如何存储输入值
- node.js - Phusion Passenger:nodejs 应用程序出现“初始化语言运行时”和“加载或执行应用程序”错误
- javascript - 多次打开模态时的双重事件