他のバージョンの文書 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 [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE name
    HANDLER call_handler [ INLINE inline_handler ] [ VALIDATOR valfunction ]
CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE name

説明

CREATE LANGUAGEは新しい手続き言語をPostgreSQLデータベースに登録します。 この後で、関数とプロシージャをその新しい言語で定義できるようになります。

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

CREATE OR REPLACE LANGUAGEは新しい言語を作成、または、既存の定義を置き換えます。 言語がすでに存在する場合、パラメータはコマンドに従って更新されますが、言語の所有権と権限に関する設定は変更されません。 また、その言語で作成された既存の関数も依然として有効であるものとみなされます。

新しい言語を登録する、または、既存の言語のパラメータを変更するには、ユーザはPostgreSQLのスーパーユーザ権限を持たなければなりません。 しかし、言語が一度作成されれば、その所有権を非スーパーユーザに割り当てたり、そのユーザが削除したり、権限を変更したり、新しい所有者に割り当てたりすることは有効です。 (しかしながら、基本的なC関数の所有権を非スーパーユーザに割り当てないでください。それは、そのユーザに権限昇格パスを作ることになるでしょう。)

ハンドラ関数を指定しない形式のCREATE LANGUAGEは廃止されました。 古いダンプファイルとの後方互換性のため、CREATE EXTENSIONと解釈されます。 言語が同じ名前の拡張としてパッケージ化されていれば問題なく動作するでしょう、そしてそのようなパッケージ化は手続き言語を設定するのによく行なわれている方法です。

パラメータ

TRUSTED

TRUSTEDは、他の方法ではユーザがアクセスできないデータに対しては、その言語でのアクセスが許されないことを指定します。 言語の登録時にこのキーワードを省略すると、PostgreSQLのスーパーユーザ権限を持つユーザのみが、この言語を使って新しい関数を作れるようになります。

PROCEDURAL

これには意味はありません。

name

新しい手続き言語の名前です。 この名前はデータベースの言語の中で一意でなければなりません。

HANDLER call_handler

call_handlerは手続き言語の関数を実行するために呼び出される関数の名前で、事前に登録しておく必要があります。 このハンドラは、Version-1呼び出し規約に則って、C言語のようなコンパイル言語で書かれている必要があります。また、引数を取らずlanguage_handler型を返す関数として、PostgreSQLに登録されていなければなりません。 language_handler型は、単に関数を呼び出しハンドラとして識別するのに使用するプレースホルダ型です。

INLINE inline_handler

inline_handlerはこの言語で無名コードブロックを実行(DOコマンド)するために呼び出される、事前に登録された関数の名前です。 inline_handler関数が指定されない場合、その言語では無名コードブロックをサポートしません。 このハンドラ関数は、DOコマンドの内部表現となるinternal型の引数を1つ取らなければならず、また、通常voidを返します。 ハンドラの戻り値は無視されます。

VALIDATOR valfunction

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

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

注釈

手続き言語を削除するにはDROP LANGUAGEを使用してください。

システムカタログpg_language52.29参照)には、現在インストールされている言語に関する情報が記録されています。 またpsqlのコマンド\dLはインストールされた言語を一覧表示します。

手続き言語で関数を作成するには、ユーザはその言語に対するUSAGE権限を持たなければなりません。 デフォルトでは、信頼された言語についてはPUBLICに(つまり全員に)USAGEが付与されています。 これは必要に応じて取り消すことができます。

手続き言語は各データベースに局所的です。 しかし、言語をtemplate1データベースにインストールすることができます。 この場合、その後に作成されたすべてのデータベースで自動的にその言語は使用できるようになります。

新しい手続き言語を作成する最小の手順は以下の通りです。

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

通常、これは拡張の作成スクリプト内に書かれており、ユーザは拡張をインストールすることでこれをすることになるでしょう。

CREATE EXTENSION plsample;

互換性

CREATE LANGUAGEPostgreSQLの拡張です。

関連項目

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