PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 41. PL/Tcl - Tcl 过程语言 | 下一页

# 41.8. 模块和`unknown`的命令

PL/Tcl 使用时支持自动加载 Tcl 代码。它识别一个特殊的`pltcl_modules`表， 该表被认为包含 Tcl 代码的模块。如果存在这个表，则在数据库会话中的PL/Tcl函数第一次执行之前， 从该表中抓取`unknown`模块并加载到 Tcl 解释器中。（如果在一个会话中有多个， 将单独为每个Tcl解释器发生；参阅第 41.4 节。）

因为`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`模块） 除非它被超级用户所有。但是这个表上的更新权限可以赋予给其他用户，如果你足够信任他们。

上一页 | 起始页 | 下一页
PL/Tcl中的事件触发器程序 | 上一级 | Tcl 过程名字