第 38章PL/Tcl - Tcl 手続き型言語

目次
38.1. 概要
38.2. PL/Tcl 関数と引数
38.3. PL/Tclにおけるデータの値
38.4. PL/Tclにおけるグローバルデータ
38.5. PL/Tclからのデータベースアクセス
38.6. PL/Tcl のトリガプロシージャ
38.7. モジュールと unknown コマンド
38.8. Tcl プロシージャ名

PL/Tclとは、PostgreSQLデータベースシステムにロード可能な手続型言語で、Tcl言語を使った関数とトリガプロシージャを作成できます。

38.1. 概要

PL/Tclでは、数点の制約を除いて、C言語で書かれた関数と同じような能力のものを提供します。

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

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

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

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