多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 41.7\. 模块和`unknown`的命令 PL/Tcl 使用时支持自动加载 Tcl 代码。它识别一个特殊的`pltcl_modules`表, 该表被认为包含 Tcl 代码的模块。如果存在这个表,则在数据库会话中的PL/Tcl函数第一次执行之前, 从该表中抓取`unknown`模块并加载到 Tcl 解释器中。(如果在一个会话中有多个, 将单独为每个Tcl解释器发生;参阅[Section 41.4](#calibre_link-873)。) 因为`unknown`模块实际上可以包含任何你需要的初始化脚本,它通常是定义为一个Tcl `unknown`过程,在 Tcl 不能识别一个调用的过程名的时候就调用它。PL/Tcl 这个过程的标准版本试图在`pltcl_modules`里找到一个定义所需要过程的模块。 如果找到一个,那么把它加载入解释器,然后允许继续按照原来的过程调用处理。另外还定义了一个 `pltcl_modfuncs`表,它提供了哪个函数由哪个模块定义的索引,因此查找过程相当快。 PostgreSQL包括维护这些表的支持脚本:`pltcl_loadmod`, `pltcl_listmod`, `pltcl_delmod`以及标准`share/unknown.pltcl` 中`unknown`模块的源代码。这个模块必须一开始就加载入每个数据库才能支持自动加载机制。 表`pltcl_modules`和`pltcl_modfuncs`必需可以为所有人读取, 但是把它做成只有数据库管理员可写并拥有是明智的。作为一个安全预防, PL/Tcl将忽略`pltcl_modules`(并且因此,不尝试加载`unknown`模块) 除非它被超级用户所有。但是这个表上的更新权限可以赋予给其他用户,如果你足够信任他们。