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

41.1. 概要

PL/Tclは、いくつか制限がありますが、C言語で書かれた関数と同じような能力を提供します。 さらに、Tclで利用できる、強力な文字列処理ライブラリを持っています。

すべてがTclインタプリタの安全なコンテキスト内で実行されるという制約はやむを得ないものですが、逆に 良い 制約でもあります。 安全なTclの制約付きのコマンドセットに、SPIを使ってデータベースにアクセスするコマンドと、 elog() を使ってメッセージを処理するためのコマンドなどの、わずかなコマンドが追加されています。 C関数では可能ですが、PL/Tclにはデータベースサーバ内部にアクセスする方法や、 PostgreSQL サーバプロセスの権限によるOSレベルのアクセスを行う方法はありません。 この結果、非特権データベースユーザがこの言語を信頼して使用することができます。 つまり、無制限の権限は与えられません。

その他の注意すべき実装上の制約として、Tcl関数を使用して新しいデータ型用の入出力関数を作成することはできません。

例えば、メールを送るTcl関数が必要な場合など、安全なTclに制約されないTcl関数を書くことが望ましい場合があります。 このような場合、 PL/TclU (信頼されないTcl)という PL/Tcl の亜種を使用します。 これは、完全なTclインタプリタが使用されているという点以外の違いはありません。 PL/TclU を使用する場合は、信頼されていない手続き言語としてインストールする必要があります 。 そうすることによって、データベースのスーパーユーザのみが関数を作成することができるようになります。 PL/TclU 関数ではデータベース管理者としてログインしたユーザができるあらゆることの実行が可能となるので、作成する際に、この関数が意図された以外のことを行わないように細心の注意を払う必要があります。

インストール時にTclサポートの設定が指定されていれば、 PL/Tcl PL/TclU 呼び出しハンドラの共有オブジェクトコードは自動的に作成され、 PostgreSQL のライブラリディレクトリにインストールされます。 PL/Tcl または PL/TclU の一方あるいは両方を特定のデータベースにインストールしたい場合は、 CREATE EXTENSION または createlang プログラムを使用してください。 例えば、 createlang pltcl dbname または createlang pltclu dbname です。


powered by SEO.CUG.NET