PL/Tclとは、PostgreSQLデータベースシステムにロード可能な手続型言語で、Tcl言語を使った関数とトリガプロシージャを作成できます。
このパッケージのオリジナルは、Jan Wieck氏によって書かれました。
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/TclとPL/TclU呼び出しハンドラの共有オブジェクトは自動的にコンパイルされ、PostgreSQLのライブラリディレクトリにインストールされます。PL/Tcl、またはPL/TclUを特定のデータベースにインストールしたい場合は createlang スクリプトを使用して下さい。例えば、 createlang pltcl dbname または createlang pltclu dbname です。