打算写一个简单的数据库迁移工具

之前做项目一直被数据库schema改动折腾得不行,找了不少工具,比如migrate4j,dbmigrate和liquibase之类的,感觉都不是很满意。其实我的需求很简单,不需要数据库的DSL(比如migrate4j或者db:migrate的那种用Java/Ruby描述DDL),只需要纯的SQL(也就是db:migrate生成的SQL),只需要前向操纵(即不需要回滚),有Eclipse的插件。
现有的migration工具,都是使用分开的文件作为不同版本的内容,这带来了很大的灵活性。但是我的打算是对现有的开发模式有最小的影响。比如现在项目的开发方式是使用一个schema文件外加几个基础数据文件。于是我打算直接使用SVN作为数据库版本的保存工具,利用SVN的特性做版本化。最直接使用的就是SVN的版本号。不过这样的问题在于基本无法做rollback,除非使用两个文件,一个construction,一个destruction,但这要求两个文件一起提交,带来了不少复杂性。现有项目的schema不需要做rollback,正好这么做。工作的方式为:更新SVN,获得最新的schema文件和当前的版本做对比,把增加的部分(要求更新append在最后)执行一遍。就这么简单。
调查了一下午+半个晚上,基本把一些技术方案给调查清楚了。主要的难度在于和subclipse的集成。既然功能简单,就要做到易用。于是我打起了subclipse的主意,主要是subclipse保存的SVN用户名密码。发现subclipse还挺变态的,JavaHL的接口使用HOME目录保存,SVNKit接口使用Eclipse的keyrings文件。
这两天就动手,代码参考较为简单(或者说简陋)的dbmigrate。

Leave a Reply

Your email address will not be published.