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

目次
36.1. 概要
36.2. PL/Tcl 関数と引数
36.3. PL/Tclにおけるデータの値
36.4. PL/Tclにおけるグローバルデータ
36.5. PL/Tclからのデータベースアクセス
36.6. PL/Tcl のトリガプロシージャ
36.7. モジュールと unknown コマンド
36.8. Tcl プロシージャ名

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

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