他のバージョンの文書10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

41.8. モジュールとunknownコマンド

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

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

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

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