手続き言語のインストール

PostgreSQL 9.1.1文書
前のページ | 巻戻し | 第 38章手続き言語 | 早送り | 次のページ

# 38.1. 手続き言語のインストール

手続き言語は、それらが使用されるデータベース全てに"インストール"されている必要があります。 しかし、`template1`データベースにインストールされた手続き言語は、`template1`内の項目は`CREATE DATABASE`によってコピーされますので、その後に作成された全てのデータベースで自動的に使用できます。 したがって、データベース管理者はどのデータベースにどの言語を使用するかを決定できますし、デフォルトで使用できる言語も決定できます。

標準配布物で提供される言語では、その言語を現在のデータベースにインストールするには`CREATE EXTENSION` `language_name` の実行のみが必要です。 シェルコマンドラインからcreatelang プログラムを使用してこれを行うこともできます。 例えば、PL/Perlを`template1`データベースにインストールするには、下記のように実行してください。

    createlang plperl template1

下記の手作業は拡張機能としてパッケージ化されていない言語をインストールする場合にのみ行うことを推奨します。

手続き言語の手作業によるインストール方法

手続き言語を次の5段階でデータベースにインストールすることができます。 この作業はデータベースのスーパーユーザで行う必要があります。 ほとんどの場合、必要なSQLコマンドは"拡張機能"のインストールスクリプトとしてパッケージ化されていますので、この作業を実行するのに`CREATE EXTENSION`が利用できます。

1. その言語ハンドラ用の共有オブジェクトがコンパイルされ、適切なライブラリディレクトリにインストールされている必要があります。 これは、通常のユーザ定義のC関数を作成してインストールする時と同じです。 項35.9.6を参照してください。 実際のプログラミング言語エンジンを提供する外部ライブラリに、言語ハンドラが依存していることがよくあります。 この場合はそのライブラリもインストールしなければなりません。

2. ハンドラは下記のコマンドで宣言されなければなりません。

       CREATE FUNCTION handler_function_name()
           RETURNS language_handler
           AS 'path-to-shared-object'
           LANGUAGE C;

   `language_handler`という特別な戻り値の型は、この関数が定義済みのSQLデータ型を返さず、SQL文では直接使用できないことをデータベースシステムに伝えます。

3. 省略可能ですが、言語ハンドラは、この言語で書かれた無名コードブロック(DO コマンド)を実行する"インライン"ハンドラ関数を提供することができます。 インラインハンドラ関数が言語により提供されるのであれば、以下のようなコマンドで宣言されます。

       CREATE FUNCTION inline_function_name(internal)
           RETURNS void
           AS 'path-to-shared-object'
           LANGUAGE C;

4. 省略可能ですが、言語ハンドラは、実際に実行することなく関数定義の正確性を検査する"有効性検査"関数を提供することができます。 もし存在すれば、有効性検査関数は`CREATE FUNCTION`で呼び出されます。 有効性検査関数が言語により提供されるのであれば、以下のようなコマンドで宣言されます。

       CREATE FUNCTION validator_function_name(oid)
           RETURNS void
           AS 'path-to-shared-object'
           LANGUAGE C STRICT;

5. 最終的に、PLは下記のコマンドで宣言されなければいけません。

       CREATE [TRUSTED] [PROCEDURAL] LANGUAGE language-name
           HANDLER handler_function_name
           [INLINE inline_function_name]
           [VALIDATOR validator_function_name] ;

   `TRUSTED`というオプションキーワードは、ユーザがアクセス権を持たないデータに対して、その言語がアクセス権を持たないことを指定します。 `TRUSTED`である言語は（スーパーユーザ権限を持たない）一般ユーザ用に設計されており、安全に関数やトリガプロシージャを作成できます。 PL関数はデータベースサーバの内部で実行されますので、`TRUSTED`フラグはデータベースサーバ内部やファイルシステムへのアクセスを持たない言語のみが使わなければなりません。 PL/pgSQLとPL/Tcl、PL/Perl言語は`TRUSTED`の対象と考えられています。 提供される機能が無制限に設計されているPL/TclU、PL/PerlU、PL/PythonU言語については、`TRUSTED`を指定してはなりません。

例38-1に、手作業によるインストール手順がPL/Perl言語でどのように動作するかを示します。

例 38-1. PL/Perlの手作業によるインストール

以下のコマンドは、データベースサーバにPL/Perl言語の呼び出しハンドラ関数用の共有ライブラリの存在場所を通知します。

    CREATE FUNCTION plperl_call_handler() RETURNS language_handler AS
        '$libdir/plperl' LANGUAGE C;

PL/Perlはインラインハンドラ関数と有効性検査関数を有していますので、以下のようにも宣言できます。

    CREATE FUNCTION plperl_inline_handler(internal) RETURNS void AS
        '$libdir/plperl' LANGUAGE C;

    CREATE FUNCTION plperl_validator(oid) RETURNS void AS
        '$libdir/plperl' LANGUAGE C STRICT;

以下のコマンドは、直前に宣言された関数を、言語属性が`plperl`である関数やトリガプロシージャ用に呼び出さなければならないことを定義します。

    CREATE TRUSTED PROCEDURAL LANGUAGE plperl
        HANDLER plperl_call_handler
        INLINE plperl_inline_handler
        VALIDATOR plperl_validator;

デフォルトのPostgreSQLインストレーションでは、PL/pgSQL言語用のハンドラは構築され、"library"ディレクトリにインストールされます。 さらに、PL/pgSQL言語自体がデータベースすべてにインストールされます。 Tclのサポート付きで構築した場合、PL/TclとPL/TclU用のハンドラも構築され同じ場所にインストールされますが、言語自体はデフォルトではどのデータベースにもインストールされません． 同様に、Perlサポート付きで構築した場合はPL/PerlとPL/PerlUハンドラが、Pythonサポート付きで構築した場合はPL/PythonUハンドラが構築され、インストールされますが、言語自体はデフォルトではインストールされません。

前のページ | ホーム | 次のページ
手続き言語 | 上に戻る | PL/pgSQL - SQL手続き言語