手続き言語は、それらが使用されるデータベースすべてに "インストール" されている必要があります。しかし、template1 にインストールされた手続き言語はその後に作成されたデータべースで自動的に使用できます。したがって、データベース管理者はどのデータベースにどの言語を使用するかを決定できますし、デフォルトで使用できる言語も決定できます。
標準ディストリビューションで入っている言語に関しては、手動で実行するのではなく、createlang シェルスクリプトを使用することができます。例えば、PL/pgSQL を template1 のデータベースにインストールするには、下記のように実行して下さい。
createlang plpgsql template1
下記の手作業は createlang が認識できない独自の言語に対してのみ使用することを推奨します。
手続き言語の手作業によるインストール方法
手続き言語は、データベースのスーパユーザによって、次の 3 段階でデータベースにインストールすることができます。
まず、その言語のハンドラ用の共有オブジェクトがコンパイルされ、インストールされている必要があります。これは C で作成したユーザ定義関数を作成してインストールする時と同じです。 Section 12.5.7を参照して下さい。
ハンドラは下記のコマンドで定義されなければなりません。
CREATE FUNCTION handler_function_name () RETURNS OPAQUE AS 'path-to-shared-object' LANGUAGE C;
OPAQUEという特別な戻り値の型を持っている関数は、定義済みの SQL の型を返さず、 SQL 文では直接使用できないことをデータベースに伝えます。
PLは下記のコマンドで宣言されなければいけません。
CREATE [TRUSTED] [PROCEDURAL] LANGUAGE language-name HANDLER handler_function_name;
TRUSTED というオプションキーワードは、スーパーユーザの権利を持たない一般ユーザがこの言語を使って関数やトリガプロシージャを作成できるかどうかを知らせます。PL 関数はデータベースサーバの内部で実行されますので、 TRUSTED フラグはデータベースサーバ内部やファイルシステムへのアクセスを持たない言語のみが使われるべきです。 PL/pgSQL と PL/Tcl、 PL/Perl、PL/Python では使用できることが確認できています。提供される機能に制限がない PL/TclU では 使用しないで下さい。
PostgreSQLのデフォルトのインストールでは、 PL/pgSQL 言語のハンドラは構築され、 "library" ディレクトリにインストールされます。Tcl/Tkサポートが設定された場合、PL/Tcl と PL/TclU のハンドラも構築され、同じ場所にインストールされます。同様にPerlサポートが設定された場合 PL/Perl と PL/PerlU のハンドラも構築され、同じ場所にインストールされます。Python サポートが設定された場合も同様に、PL/Python のハンドラがインストールされます。 createlang スクリプトは上記の step 2 と step 3 を自動的に実行します。
Example 22-1. PL/pgSQL の手作業によるインストール
以下のコマンドは、データベースサーバに PL/pgSQL 言語の呼び出しハンドラ関数用共有ライブラリが存在するのかを通知します。
CREATE FUNCTION plpgsql_call_handler () RETURNS OPAQUE AS '$libdir/plpgsql' LANGUAGE C;
そして、以下のコマンドにより、直前に宣言された呼び出しハンドラ関数を言語属性が plpgsql である、関数やトリガプロシージャ用に呼び出さなければならないことを定義します。
CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql HANDLER plpgsql_call_handler;