無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

41.7. モジュールと 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_loadmod pltcl_listmod および pltcl_delmod が含まれています。 同様に標準の unknown モジュールのソースが share/unknown.pltcl に含まれています。 自動読み込み機構をサポートさせるためには、あらかじめ各データベースにこのモジュールを読み込ませる必要があります。

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


powered by SEO.CUG.NET