makeを使ってデータベーススキーマを管理する
ユーザー定義関数をデーターベースに定義するとする。 udf3はudf1とudf2を呼び出しているとする。 そうすると、udf1,udf2をコンパイルしてから、udf3をコンパイルしなくてはいけない。 いっぱい作っていと、順番がごちゃごちゃになってしまって、頭がグルグルしてきちゃう。
これはDB2というデーターベースを使った例ですが、makefileを以下のように 用意しておいて、makeをポンとたたけば、いい感じにコンパイルしてくれる。 udfを新しくして、入れ替える時もsqlファイルを変えてmakeをポンとたたけば 変えたところをコンパイルしてくれる。
all: udf3.log udf3.log: udf3.sql udf1.log udf2.log db2 connect to sample_db; \ db2 -td@ -vf udf3.sql > udf3.log udf1.log: udf1.sql db2 connect to sample_db; \ db2 -td@ -vf udf1.sql > udf1.log udf2.log: udf2.sql db2 connect to sample_db; \ db2 -td@ -vf udf2.sql > udf2.log
ユーザー定義関数や、ストアドプロシージャ、トリガー、テーブル(新たに作る場合)などの管理はこんな感じでやるといいかなと考えたのですが、
テーブルのカラムの追加などの場合はどうしようか考えてみた。
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/make-intro/suffix.html
.SUFFIXES: .sql .log .sql.log: db2 connect to sample_db db2 -tvf $< > $@ IN = $(wildcard *.sql) DATA = $(IN:.sql=.log) all: $(DATA)
alter table文をsqlサフィックスをつけて保存してmakeしたら反映されていない分をドカッと定義してくれるんではないかな?alter_table_hoge_001.sql,alter_table_hoga_001.sqlのように命名規約をつくる。
でもこちらはほとんどうま味がないなぁ。結局logがあるかないかでバージョン管理するだけになってしまいそう。