36.7. 模块和unknown(未知)的命令

PL/Tcl 使用时支持自动装载 Tcl 代码。 它识别一个特殊的表,pltcl_modules,该表被认为包含 Tcl 代码的模块。 如果存在这个表,则在创建完解释器后马上从该表中抓取 unknown 模块并装载到 Tcl 解释器中。

因为 unknown 模块实际上可以包含任何你需要的初始化脚本, 它通常是定义为一个 Tcl unknown 过程,在 Tcl 不能识别一个调用的过程名的时候就调用它。 PL/Tcl这个过程的标准版本试图在 pltcl_modules 里找到一个定义所需要过程的模块。 如果找到一个,那么把它装载入解释器,然后允许继续按照原来的过程调用处理。 另外还定义了一个表 pltcl_modfuncs,它提供了哪个函数由哪个模块定义的索引,因此查找过程相当快。

PostgreSQL 包括维护这些表的支持脚本: pltcl_loadmodpltcl_listmodpltcl_delmod,以及标准unknown模块 share/unknown.pltcl 的源代码。 这个模块必须一开始就装载入每个数据库才能支持自动装载机制。

pltcl_modulespltcl_modfuncs 必需可以为所有人读取, 但是把它做成只有数据库管理员可写并拥有是明智的。