モジュールとunknownコマンド

PostgreSQL 9.0.0文書
前のページ | 巻戻し | 第 40章PL/Tcl - Tcl手続き型言語 | 早送り | 次のページ

# 40.7. モジュールと`unknown`コマンド

PL/Tclでは、使用時に自動的にTclのコードを読み込む機能があります。 これは、Tclコードのモジュールを含むと仮定される`pltcl_modules`という特殊なテーブルを認識します。 このテーブルが存在する場合、そのテーブルから`unknown`モジュールが取り出され、データベースセッション内でPL/Tclが最初に実行される直前にTclインタプリタに読み込まれます。 (これはPL/TclとPL/TclUの両方が使用される場合、それぞれで分離して起こります。 2つの言語で別々のインタプリタが使用されるためです。)

実際、`unknown`モジュールには必要な任意の初期化コードを含めることができますが、通常は、そこにTcl "unknown"プロシージャを定義します。 このプロシージャはTclが呼び出されたプロシージャ名を認識できなかった場合に常に呼び出されます。 このプロシージャのPL/Tcl標準バージョンでは、必要なプロシージャを定義している`pltcl_modules`からのモジュール検索を試みます。 プロシージャが検出された場合、インタプリタに読み込まれ、その後、元々試みられたプロシージャ呼び出しを実行することが許されます。 二次的な`pltcl_modfuncs`テーブルは、どの関数がどのモジュールで定義されているかに関するインデックスを提供します。 これにより検索がかなり高速になります。

PostgreSQLの配布には、これらのテーブル管理用のサポートスクリプト、`pltcl_loadmod`、`pltcl_listmod`および`pltcl_delmod`が含まれています。 同様に標準の`unknown`モジュールのソースが`share/unknown.pltcl`に含まれています。 自動読み込み機構をサポートさせるためには、あらかじめ各データベースにこのモジュールを読み込ませる必要があります。

`pltcl_modules`および`pltcl_modfuncs`テーブルは全ユーザから読み取り可能でなければなりません。 しかし、その所有者をデータベース管理者とし、データベース管理者のみが書き込み可能とする方が良いでしょう。 セキュリティ対策としてPL/Tclは`pltcl_modules`をスーパーユーザが所有していない限りそれを無視します(このため`unknown`モジュールの読み込みを行いません)。 しかし、十分信頼できるのであればこのテーブル上の更新権限を他のユーザに付与することができます。

前のページ | ホーム | 次のページ
PL/Tclのトリガプロシージャ | 上に戻る | Tclプロシージャ名