無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

CREATE LANGUAGE

名前

CREATE LANGUAGE -- 新しい手続き言語を定義する

概要

CREATE [ OR REPLACE ] [ PROCEDURAL ] LANGUAGE 

name


CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE 

name


    HANDLER 

call_handler

 [ INLINE 

inline_handler

 ] [ VALIDATOR 

valfunction

 ]

説明

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

注意: PostgreSQL 9.1から、ほとんどの手続き言語は "拡張" としてまとめられました。 したがって CREATE LANGUAGE ではなく CREATE EXTENSION を使用してインストールすべきです。 CREATE LANGUAGE を直接使用することは拡張インストール用スクリプトに限定されなければなりません。 おそらくアップグレードの結果 "むきだしの" 言語がデータベース内に存在する場合、 CREATE EXTENSION langname FROM unpackaged を用いて拡張に変換することができます。

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

CREATE LANGUAGE コマンドには2種類の形式があります。 最初の形式は、ユーザは必要な言語の名前のみを単に指定するものです。 この場合、 PostgreSQL サーバは pg_pltemplate システムカタログを参照し、正しいパラメータを決定します。 2番目の形式では、ユーザは言語名の他に言語のパラメータも入力します。 この形式で、 pg_pltemplate で定義されていない言語を作成することができますが、この手法は廃棄予定です。

指定された言語名に対応する pg_pltemplate カタログの項目をサーバが見つけると、コマンドに言語のパラメータが含まれていたとしてもカタログのデータを使用します。 この動作により、古すぎる言語のサポート関数に関する情報を含む、古いダンプファイルからの読み込みが簡単になります。

通常、新しい言語を登録するには、ユーザは PostgreSQL のスーパーユーザ権限を持たなければなりません。 しかし、言語が pg_pltemplate カタログ内に記載され、データベース所有者による作成可能印( tmpldbacreate が真)が付いていれば、データベース所有者はそのデータベース内に新しい言語を登録することができます。 デフォルトで、信頼された言語はデータベース所有者による作成ができます。 しかし、これはスーパーユーザによる pg_pltemplate の変更により調整できます。 言語作成者が言語の所有者になり、後で削除したり、名前を変えたり、別の所有者を割り当てたりすることができます。

CREATE OR REPLACE LANGUAGE は新しい言語を作成、または、既存の定義を置き換えます。 言語がすでに存在する場合、パラメータは指定された値または pg_pltemplate から取り出された値にしたがって更新されますが、言語の所有権と権限に関する設定は変更されません。 また、その言語で作成された既存の関数も以前として有効であるものと仮定されます。 言語を作成する際に通常要求される権限に加え、ユーザはスーパーユーザまたは既存言語の所有者でなければなりません。 REPLACE の場合、主に言語が存在することを確認するために使用することを意味します。 その言語が pg_pltemplate 項目を持つ場合、 REPLACE は既存の定義を実際にはまったく変更しません。 ただし、言語が作成されてから pg_pltemplate 項目が変更された通常ではない場合は例外です。

パラメータ

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() 関数を使用すべきです。 関数の戻り値は無視されます。

サーバが指定した言語名に対応する pg_pltemplate の項目を見つけた場合、 TRUSTED オプションとサポート関数名は無視されます。

注釈

createlang CREATE LANGUAGE に対する簡単なラッパプログラムです。 これを使用して簡単にシェルコマンドラインから手続き言語をインストールすることができます。

手続き言語を削除するには、 DROP LANGUAGE 、または droplang を使用してください(後者を勧めます)。

システムカタログ pg_language 項47.28 参照)には、現在インストールされている言語に関する情報が記録されています。 また、 createlang にはインストールされた言語を列挙するオプションがあります。

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

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

呼び出しハンドラ関数とインラインハンドラ関数(もしあれば)、検証関数(もしあれば)は、サーバが pg_pltemplate 内にその言語に関する項目を持っていない場合には、存在しなければなりません。 しかし、その項目があったとしても、関数がすでに存在しているとは限りません。 データベース内に存在していなければ自動的に定義されます。 (言語を実装する共有ライブラリがインストレーションで利用できない場合、これにより CREATE LANGUAGE が失敗する可能性があります。)

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

標準的な手続き言語を作成する推奨方法は単に以下のように行うことです。

CREATE LANGUAGE plperl;

pg_pltemplate カタログ内に存在しない言語では、以下のような処理が必要です。

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

互換性

CREATE LANGUAGE PostgreSQL の拡張です。

関連項目

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

powered by SEO.CUG.NET