鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

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があるかないかでバージョン管理するだけになってしまいそう。