PostgreSQL拡張モジュールの配布を考えているのであれば、移植可能な構築システムを準備することはかなり難しいものになるかもしれません。 このためPostgreSQLインストレーションは単純な拡張モジュールをすでにインストールされているサーバに対して簡単に構築することができるように、PGXSと呼ばれる拡張向けの構築基盤を提供します。 PGXSは主にCコードを含む拡張を意図していますが、SQLのみからなる拡張でも使用することができます。 PGXSがPostgreSQLと相互に作用する任意のソフトウェアを構築するために使用できるような万能な構築システムを意図したものではないことに注意してください。 これは単に、単純なサーバ拡張用の一般的な構築規則を自動化するものです。 より複雑なパッケージでは、独自の構築システムを作成する必要があるかもしれません。
独自の拡張でPGXS基盤を使用するためには、簡単なメークファイルを作成する必要があります。
このメークファイルの中で、いくつか変数を設定し、大域的なPGXSメークファイルをインクルードする必要があります。
以下にisbn_issn
という名称の拡張モジュールを構築する例を示します。
このモジュールはいくつかのCコードを含む共有ライブラリ、拡張の制御ファイル、SQLスクリプト、ドキュメントテキストファイルから構成されます。
MODULES = isbn_issn EXTENSION = isbn_issn DATA = isbn_issn--1.0.sql DOCS = README.isbn_issn PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS)
最後の3行は常に同じです。 ファイルのこの前に変数の設定と独自のmakeルールを記載してください。
以下の3個の変数の1つを構築対象に指定してください。
MODULES
同じ家系のソースファイルから構築される共有ライブラリのリストです。 (このリストにはライブラリ接頭辞を含めないでください。)
MODULE_big
複数のソースファイルから構築される共有ライブラリです。
(OBJS
にオブジェクトファイルを列挙します。)
PROGRAM
構築する実行プログラムです。
(OBJS
にオブジェクトファイルを列挙します。)
以下の変数も設定することができます。
EXTENSION
拡張の名前です。
各名前に対して、
にインストールされるprefix
/share/extension
を提供しなければなりません。
extension
.control
MODULEDIR
DATAおよびDOCSファイルのインストール先となるはずの
サブディレクトリです。
(設定がない場合、デフォルトはprefix
/shareEXTENSION
が設定されている場合はextension
に、設定されていない場合はcontrib
になります。)
DATA
にインストールされる様々なファイルです。
prefix
/share/$MODULEDIR
DATA_built
にインストールされる、最初に構築しなければならない様々なファイルです。
prefix
/share/$MODULEDIR
DATA_TSEARCH
以下にインストールされる様々なファイルです。
prefix
/share/tsearch_data
DOCS
以下にインストールされる様々なファイルです。
prefix
/doc/$MODULEDIR
SCRIPTS
にインストールされるスクリプトファイルです(バイナリファイルではありません)。
prefix
/bin
SCRIPTS_built
にインストールされる、最初に構築しなければならないスクリプトファイルです(バイナリファイルではありません)。
prefix
/bin
REGRESS
リグレッションテストケース(接尾辞がない)のリストです。 後述します。
REGRESS_OPTS
pg_regressに渡す追加オプションです。
NO_INSTALLCHECK
installcheck
ターゲットを定義しません。
テストの際に特殊な設定が必要、あるいはpg_regressを使用しない場合などに有用です。
EXTRA_CLEAN
make clean
で削除される追加ファイルです。
PG_CPPFLAGS
CPPFLAGS
に追加されます。
PG_LIBS
PROGRAM
のリンク行に追加されます。
SHLIB_LINK
MODULE_big
リンク行に追加されます。
PG_CONFIG
構築対象のPostgreSQLインストレーション用のpg_configプログラムへのパスです。
(通常はPATH
内の最初に見つかるpg_config
が単純に使用されます)
このメークファイルをMakefile
として拡張を保管するディレクトリ内に保管してください。
その後コンパイルするためにmake
を、モジュールをインストールするためにmake install
を行うことができます。
デフォルトでは、PATH
の中で最初に見つかるpg_config
プログラムが対応するPostgreSQLインストレーション用に拡張はコンパイルされ、インストールされます。
メークファイルまたはmake
のコマンドラインのいずれかでPG_CONFIG
を別のpg_config
プログラムを指し示すように設定することで、別のインストレーションを使用することができます。
構築ディレクトリを別にしておきたいのであれば、拡張のソースツリーの外のディレクトリでmake
を実行することもできます。
この方法はVPATH構築とも呼ばれます。
以下にやり方を示します。
mkdir build_dir cd build_dir make -f /path/to/extension/source/tree/Makefile make -f /path/to/extension/source/tree/Makefile install
あるいは、コアコードと同様な方法でVPATH構築用のディレクトリを設定できます。
そのようにする1つの方法は、コアスクリプトconfig/prep_buildtree
を使うことです。
一度そうすれば、make
変数VPATH
を以下のように設定することで、構築できます。
make VPATH=/path/to/extension/source/tree make VPATH=/path/to/extension/source/tree install
この方法はより様々なディレクトリのレイアウトで機能します。
REGRESS
変数に列挙されたスクリプトは、make install
を実行した後でmake installcheck
によって呼び出すことができる、作成したモジュールのリグレッションテストで使用されます。
これが動作するためには、PostgreSQLサーバが実行していなければなりません。
REGRESS
変数に列挙されたスクリプトは、拡張のディレクトリ内のsql/
という名前のサブディレクトリ内に存在しなければなりません。
これらのファイルは.sql
という拡張子を持たなければなりません。
この拡張子はメークファイル内のREGRESS
リストには含まれません。
また試験ごとにexpected/
という名前のサブディレクトリ内に想定出力を内容として含む、同じステムに.out
拡張子を付けた名前のファイルがなければなりません。
make installcheck
はpsqlを用いて各試験スクリプトを実行し、結果出力が想定ファイルに一致するかどうか比較します。
何らかの差異はdiff -c
書式でregression.diffs
に書き出されます。
想定ファイルがない試験を実行しようとすると「問題」として報告されます。
このためすべての想定ファイルがあることを確認してください。
想定ファイルを作成する最も簡単な方法は、空のファイルを作成し、試験を実行する(当然差異が報告されます)ことです。
results/
ディレクトリ内で見つかる実際の結果ファイルを確認し、テストの想定結果と合致するのであれば、expected/
にコピーしてください。