Chapter 20. PL/Tcl - Tcl 手続き型言語

Table of Contents
20.1. 概要
20.2. 説明
20.2.1. PL/Tcl 関数と引数
20.2.2. PL/Tcl におけるデータの値
20.2.3. PL/Tcl におけるグローバルデータ
20.2.4. PL/Tclからのデータベースアクセス
20.2.5. PL/Tcl のトリガプロシージャ
20.2.6. モジュールと unknown コマンド
20.2.7. Tcl プロシージャ名

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

このパッケージのオリジナルは、Jan Wieck氏によって書かれました。

20.1. 概要

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

全ては安全なTclイタープリタで実行されていることは良い制約と言えます。安全なTclの制約付きのコマンドセットに、SPIを使ってデータベースにアクセスするコマンドと、elog()を使ってメッセージを処理するためのコマンドなどの、わずかなコマンドが追加されています。C関数では可能ですが、Tclでは、データベースのバックエンド内部にアクセスする方法や、PostgreSQLユーザID権限による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 です。