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
MODULEDIRDATAおよび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_OPTSpg_regressに渡す追加オプションです。
EXTRA_CLEANmake cleanで削除される追加ファイルです。
PG_CPPFLAGSCPPFLAGSに追加されます。
PG_LIBSPROGRAMのリンク行に追加されます。
SHLIB_LINKMODULE_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/にコピーしてください。