無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

39.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 を指定しては なりません

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

例 39-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 ハンドラが構築され、インストールされますが、言語自体はデフォルトではインストールされません。


powered by SEO.CUG.NET