.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
.TH "CREATE LANGUAGE" "" "2004-06-19" "SQL - 言語" "SQL コマンド"
.SH NAME
CREATE LANGUAGE \- 新しい手続き言語の定義

.SH SYNOPSIS
.sp
.nf
CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE \fIname\fR
    HANDLER \fIcall_handler\fR [ VALIDATOR \fIvalfunction\fR ]
.sp
.fi
.SH "説明"
.PP
PostgreSQLユーザは、\fBCREATE LANGUAGE\fRを使って新しい手続き言語を PostgreSQL データベースに登録することができます。
その後、関数とトリガプロシージャはこの新しい言語で定義可能になります。
ユーザは新しい言語を登録するためにはPostgreSQLのスーパーユーザ権限を持っていなければいけません。
.PP
\fBCREATE LANGUAGE\fR は効率的に言語名と、その言語で作成された関数の実行に責任をもつ呼び出しハンドラを関連づけます。
言語呼び出しハンドラについてのより詳細は [XRef to XFUNC] を参照して下さい。
.PP
手続き言語は各データベースに局所的なものであることに注意して下さい。
デフォルトで全てのデータベースで使用できる言語を作成するためには、template1 データベースにインストールされなければなりません。
.SH "パラメータ"
.TP
\fBTRUSTED\fR
TRUSTED は、その言語の呼び出しハンドラが 安全であることを指定します。
つまり、権限を持たないユーザにはアクセス制限を無視する機能を何も与えないということです。 
もし言語を登録するときにこのキーワードが省略されると、PostgreSQLのスーパーユーザ権限を持つユーザのみが新しい関数を作るためにこの言語を使うことができるようになります。
.TP
\fBPROCEDURAL\fR
この単語はノイズです。
.TP
\fB\fIname\fB\fR
新しい手続き言語の名前です。
言語名は大文字/小文字の区別がありません。
この名前はデータベース内の言語の中で一意でなければなりません。

後方互換のため、この名前を単一引用符で括ることもできます。
.TP
\fBHANDLER \fIcall_handler\fB\fR
\fIcall_handler\fRは、 事前に登録されていた関数の名前で、この手続き言語の関数を実行するために呼び出されるものです。 
手続き言語用の呼び出しハンドラは、C 言語のようなコンパイル言語でバージョン 1 呼び出し規約を使用して作成し、引数をとらない \fBlanguage_handler\fR 型を返す関数として、PostgreSQL に登録されなければなりません。
\fBlanguage_handler\fR 型は、単に関数を呼び出しハンドラとして識別するのに使用するプレースホルダ型です。
.TP
\fBVALIDATOR \fIvalfunction\fB\fR
\fIvalfunction\fR は、事前登録済みの関数の名前で、新しい関数がその言語で作成された場合、その新しい関数を検証するために呼び出されます。 
検証用関数が指定されていない場合、新しい関数は作成時にチェックされません。 
検証用関数は、\fBoid\fR 型の引数を 1 つ取る必要があります。この引数は、作成される関数の OID になり、通常 \fBvoid\fR 型を返します。

検証用関数は通常、関数本体が構文上正しいかどうかを検査するために使用されます。
しかし、それだけでなく、たとえばその言語が特定の引数データ型を処理できないといった、関数の他のプロパティも参照可能です。 
エラーを知らせるには、検証用関数で \fBereport()\fR 関数を使用してください。 
関数の戻り値は無視されます。
.SH "注釈"
.PP
通常このコマンドはユーザが直接実行するものではありません。
PostgreSQL 配布物に含まれる手続き言語では、\fBcreatelang\fR(1) スクリプトが使用されなければなりません。 
これは正確な呼び出しハンドラのインストールも行ないます。
(\fBcreatelang\fR は内部的に\fBCREATE LANGUAGE\fR を呼び出します。)
.PP
PostgreSQL 7.3 より前のバージョンでは、ハンドラ関数を \fBlanguage_handler\fR 型ではなくプレースホルダ型 \fBopaque\fR 型を返すように宣言する必要がありました。
古いダンプファイルのロードをサポートするため、\fBCREATE LANGUAGE\fR では \fBopaque\fR 型を返すように宣言された関数を受け入れます。
しかし、注意を促すメッセージを発行し、宣言された関数の戻り値型を \fBlanguage_handler\fR に変換します。
.PP
新しい関数を作成するには、CREATE FUNCTION [\fBcreate_function\fR(l)] コマンドを使用して下さい。
.PP
手続き言語を削除するには、DROP LANGUAGE [\fBdrop_language\fR(l)] を使用して下さい。 \fBdroplang\fR(1) スクリプトを使用する方が良いでしょう。
.PP
\fBpg_language\fR システムカタログ([XRef to CATALOG-PG-LANGUAGE]参照)は現時点でインストールされた手続き言語の情報を記録します。
また、\fBcreatelang\fRには、インストール済み言語の一覧を出力するオプションがあります。
.PP
権限を除き、作成済みの手続き言語の定義を変更することはできません。
.PP
手続き言語を使用可能にするには、ユーザに USAGE 権限を与える必要があります。 
その言語が信頼できる (trusted)と分かっている場合は、\fBcreatelang\fR プログラムで全ユーザに自動的に権限を与えます。
.SH "例"
.PP
以下の続けて実行される 2 コマンドは新しい手続き言語と関連する呼び出しハンドラを登録します。
.sp
.nf
CREATE FUNCTION plsample_call_handler() RETURNS language_handler
    AS '$libdir/plsample'
    LANGUAGE C;
CREATE LANGUAGE plsample
    HANDLER plsample_call_handler;
.sp
.fi
.SH "互換性"
.PP
\fBCREATE LANGUAGE\fRはPostgreSQLの拡張です。
.SH "関連項目"
ALTER LANGUAGE [\fBalter_language\fR(l)], CREATE FUNCTION [\fBcreate_function\fR(l)], DROP LANGUAGE [\fBdrop_language\fR(l)], GRANT [\fBgrant\fR(l)], REVOKE [\fBrevoke\fR(l)], \fBcreatelang\fR(1), \fBdroplang\fR(1)
