他のバージョンの文書 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

CREATE LANGUAGE

名前

CREATE LANGUAGE -- 新しい手続き言語の定義

概要

CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE name
    HANDLER call_handler [ VALIDATOR valfunction ]

説明

PostgreSQLユーザは、CREATE LANGUAGEを使って新しい手続き言語をPostgreSQLデータベースに登録することができます。 その後、関数とトリガプロシージャはこの新しい言語で定義可能になります。 ユーザは新しい言語を登録するためにはPostgreSQLのスーパーユーザ権限を持っていなければいけません。

CREATE LANGUAGEは効率的に言語名と、その言語で作成された関数の実行に責任をもつ呼び出しハンドラを関連付けます。 言語呼び出しハンドラについての詳細は第34章を参照してください。

手続き言語は各データベースに局所的なものであることに注意してください。 言語をデフォルトで全てのデータベースで使用できるようにするためには、template1データベースにインストールされなければなりません。

パラメータ

TRUSTED

TRUSTEDは、その言語の呼び出しハンドラが安全であることを指定します。 つまり、権限を持たないユーザにはアクセス制限を無視する機能を何も与えないということです。 もし言語を登録する時にこのキーワードが省略されると、PostgreSQLのスーパーユーザ権限を持つユーザのみが新しい関数を作るためにこの言語を使うことができるようになります。

PROCEDURAL

この単語はノイズです。

name

新しい手続き言語の名前です。 言語名は大文字/小文字の区別がありません。 この名前はデータベース内の言語の中で一意でなければなりません。

後方互換のため、この名前を単一引用符で括ることもできます。

HANDLER call_handler

call_handlerは、事前に登録されていた関数の名前で、この手続き言語の関数を実行するために呼び出されるものです。 手続き言語用の呼び出しハンドラは、C言語のようなコンパイル言語でバージョン1呼び出し規約を使用して作成し、引数を取らないlanguage_handler型を返す関数として、PostgreSQLに登録されなければなりません。 language_handler型は、単に関数を呼び出しハンドラとして識別するのに使用するプレースホルダ型です。

VALIDATOR valfunction

valfunctionは、事前登録済みの関数の名前で、新しい関数がその言語で作成された場合、その新しい関数を検証するために呼び出されます。 検証用関数が指定されていない場合、新しい関数は作成時にチェックされません。 検証用関数は、oid型の引数を1つ取る必要があります。 この引数は作成される関数のOIDになります。 また、通常void型を返します。

検証用関数は通常、関数本体が構文上正しいかどうかを検査するために使用されます。 しかし、それだけでなく、例えばその言語が特定の引数データ型を処理できないといった、関数の他のプロパティも参照可能です。 エラーを知らせるには、検証用関数でereport()関数を使用してください。 関数の戻り値は無視されます。

注釈

通常このコマンドはユーザが直接実行するものではありません。 PostgreSQL配布物に含まれる手続き言語では、createlangスクリプトが使用されなければなりません。 これは正確な呼び出しハンドラのインストールも行ないます。 (createlangは内部的にCREATE LANGUAGEを呼び出します。)

PostgreSQL 7.3より前のバージョンでは、ハンドラ関数をlanguage_handler型ではなくプレースホルダ型であるopaque型を返すように宣言する必要がありました。 古いダンプファイルのロードをサポートするため、CREATE LANGUAGEではopaque型を返すように宣言された関数を受け入れます。 しかし、注意を促すメッセージを発行し、宣言された関数の戻り値型をlanguage_handlerに変換します。

新しい関数を作成するには、CREATE FUNCTIONコマンドを使用してください。

手続き言語を削除するには、DROP LANGUAGEを使用してください。 droplangプログラムを使用する方が良いでしょう。

pg_languageシステムカタログ(項41.18参照)は現時点でインストールされた手続き言語の情報を記録します。 また、createlangには、インストール済み言語の一覧を出力するオプションがあります。

手続き言語を使用可能にするには、ユーザにUSAGE権限を与える必要があります。 その言語が信頼できる(trusted)と分かっている場合は、createlangプログラムで全ユーザに自動的に権限を与えます。

以下の続けて実行される2コマンドは新しい手続き言語と関連する呼び出しハンドラを登録します。

CREATE FUNCTION plsample_call_handler() RETURNS language_handler
    AS '$libdir/plsample'
    LANGUAGE C;
CREATE LANGUAGE plsample
    HANDLER plsample_call_handler;

互換性

CREATE LANGUAGEPostgreSQLの拡張です。

関連項目

ALTER LANGUAGE, CREATE FUNCTION, DROP LANGUAGE, GRANT, REVOKE, createlang, droplang