Hatena::Grouppostgresql

PostgreSQL 雑記 このページをアンテナに追加 RSSフィード

2009-04-13バージョンごとに *.sql.in を切り替える このエントリーを含むブックマーク このエントリーのブックマークコメント

PostgreSQL の拡張モジュールを作成する場合には、contrib モジュールに倣って作ると Makefile フレームワークが使えるので楽できます。このとき、バージョンごとに処理を切り替えたい場合があります。

本体のC言語プログラムのほうは、PG_VERSION_NUM マクロがあります。例えば 8.3.7 ならば 80307 のような数値になっているので、大小比較でコードを切り替えることができます。

一方、SQL スクリプトを作成する *.sql.in の切り替えにはちょっと工夫が要りました。SQL スクリプトの中で条件分岐をすることは難しいので、*.sql.in 自体を複数用意するのが良さそうです。Makefile の中で使える MAJORVERSION (8.4 等) または VERSION (8.3.7 等) 変数を利用します。

ポイントは、VERSION に対して basename (拡張子を削る) を使うと、マイナーバージョンの部分が拡張子とみなして除去でき、MAJORVERSION と同じ表現を得られることです。頭の体操ですね。