PostgreSQLユーザは、 CREATE LANGUAGEを使って新しい言語を PostgreSQLに登録することができます。これにより、関数とトリガプロシージャはこの新しい言語で定義可能になります。ユーザは新しい言語を登録するためには PostgreSQLのスーパーユーザ権限を持っていなければいけません。
CREATE LANGUAGE は効率的に言語名と、その言語で作成された関数の実行に責任をもつ呼び出しハンドラを関連づけます。言語呼び出しハンドラについてのより詳細は プログラマガイド を参照して下さい。
手続き言語は各データベースに局所的なものであることに注意して下さい。デフォルトで全てのデータベースで使用できる言語を作成するためには、 template1 データベースにインストールされなければなりません。
TRUSTEDは、その言語の呼び出しハンドラが安全であることを指定します。つまり、権限を持たないユーザにはアクセス制限を無視する機能を何も与えないということです。もし言語を登録するときにこのキーワードが省略されると、 PostgreSQLのスーパーユーザ権限を持つユーザのみが新しい関数を作るためにこの言語を使うことができるようになります。
この単語はノイズです。
新しい手続き言語の名前です。言語名は大文字/小文字の区別がありません。手続き言語はどのPostgreSQLの組み込み言語をも上書きすることはできません。
後方互換のために、この名前は単一引用符で括る必要があります。
call_handlerは、事前に登録されていた関数の名前で、この手続き言語の関数を実行するために呼び出されるものです。手続き言語用の呼び出しハンドラは、C言語のようなコンパイル言語でバージョン1 呼び出し規約を使用して作成し、 PostgreSQL に引数をとらない、未指定、未定義型のプレースホルダを示す、opaque 型を返す関数として登録されなければなりません。
通常このコマンドはユーザが直接実行するものではありません。 PostgreSQL 配布物に含まれる手続き言語では、 createlang スクリプトが使用されなければなりません。これは正確な呼び出しハンドラのインストールも行ないます。(createlang は内部的に CREATE LANGUAGE を呼び出します。)
新しい関数を作成するには、 CREATE FUNCTION コマンドを使用して下さい。
手続き言語を削除するには、 DROP LANGUAGE を使用して下さい。droplang スクリプトを使用する方が良いでしょう。
pg_language システムカタログは現時点でインストールされた手続き言語の情報を記録します。
Table "pg_language" Attribute | Type | Modifier ---------------+---------+---------- lanname | name | lanispl | boolean | lanpltrusted | boolean | lanplcallfoid | oid | lancompiler | text | lanname | lanispl | lanpltrusted | lanplcallfoid | lancompiler -------------+---------+--------------+---------------+------------- internal | f | f | 0 | n/a C | f | f | 0 | /bin/cc sql | f | f | 0 | postgres
現在、作成済みの手続き言語の定義を変更することはできません。