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

目次
37.1. 概要
37.2. PL/Tcl関数と引数
37.3. PL/Tclにおけるデータの値
37.4. PL/Tclにおけるグローバルデータ
37.5. PL/Tclからのデータベースアクセス
37.6. PL/Tclのトリガプロシージャ
37.7. モジュールとunknownコマンド
37.8. Tclプロシージャ名

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

37.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です。