拡張構築基盤

PostgreSQL 9.1.1文書
前のページ | 巻戻し | 第 35章SQLの拡張 | 早送り | 次のページ

# 35.16. 拡張構築基盤

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)

最後の３行は常に同じです。 ファイルのこの前に変数の設定と独自のmakeルールを記載してください。

以下の３個の変数の１つを構築対象に指定してください。

`MODULES`

  同じ家系のソースファイルから構築される共有ライブラリのリストです。 （このリストにはライブラリ接頭辞を含めないでください。）

`MODULE_big`

  複数のソースファイルから構築される共有ライブラリです。 （`OBJS`にオブジェクトファイルを列挙します。）

`PROGRAM`

  構築する実行プログラムです。 （`OBJS`にオブジェクトファイルを列挙します。）

以下の変数も設定することができます。

`EXTENSION`

  拡張の名前です。 各名前に対して、``prefix`/share/extension`にインストールされる``extension`.control`を提供しなければなりません。

`MODULEDIR`

  DATAおよびDOCSファイルのインストール先となるはずの``prefix`/share`副ディレクトリです。 （設定がない場合、デフォルトは`EXTENSION`が設定されている場合は`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に渡す追加オプションです。

`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`プログラムを指し示すように設定することで、別のインストレーションを使用することができます。

注意
`PG_CONFIG`の変更は、PostgreSQL 8.3以降に対して構築する場合にのみ動作します。 より古いリリースでは、`pg_config`以外の何かを設定しても動作しません。 構築対象のインストレーションを選択するように`PATH`を変更しなければなりません。

`REGRESS`変数に列挙されたスクリプトは、`make install`を実行した後で`make installcheck`によって呼び出すことができる、作成したモジュールのリグレッション試験で使用されます。 これが動作するためには、PostgreSQLサーバが実行していなければなりません。 `REGRESS`変数に列挙されたスクリプトは、拡張のディレクトリ内の`sql/`という名前の副ディレクトリ内に存在しなければなりません。 これらのファイルは`.sql`という拡張子を持たなければなりません。 この拡張子はメークファイル内の`REGRESS`リストには含まれません。 また試験ごとに`expected/`という名前の副ディレクトリ内に想定出力を内容として含む、同じステムに`.out`拡張子を付けた名前のファイルがなければなりません。 `make installcheck`はpsqlを用いて各試験スクリプトを実行し、結果出力が想定ファイルに一致するかどうか比較します。 何らかの差異は`diff -c`書式で`regression.diffs`に書き出されます。 想定ファイルがない試験を実行しようとすると"問題"として報告されます。 このためすべての想定ファイルがあることを確認してください。

> ティップ: 想定ファイルを作成する最も簡単な方法は、空のファイルを作成し、試験を実行する（当然差異が報告されます）ことです。 `results/`ディレクトリ内で見つかる実際の結果ファイルを確認し、テストの想定結果と合致するのであれば、`expected/`にコピーしてください。

前のページ | ホーム | 次のページ
関連するオブジェクトを拡張としてパッケージ化 | 上に戻る | トリガ