41.1. 概述

PL/Tcl 提供 C 语言里面函数开发者所拥有的大多数功能,只有一点点限制除外, 另外Tcl还可以使用强大的字符串处理库。

的限制是,所有东西都是在一个安全的 Tcl 解释器里面运行的。 除了一个有限的 Tcl 安全命令集外,只有很少的几个命令可以通过 SPI 访问数据库以及通过 elog()生成错误信息。不像 C 函数那样, Tcl 没有办法访问数据库后端内部或者获得 OS 级的PostgreSQL 服务器进程的权限。因此,任何非特权的数据库用户都可以被允许使用这种语言。

另外的实现级限制是 Tcl 过程不能用于创建新数据库类型的输入/输出函数。

有时候需要写一些不受安全 Tcl 限制的 Tcl 函数,比如,可能需要一个可以发送邮件的 Tcl 函数。 要处理这样的问题,有一个PL/Tcl的变种,叫PL/TclU(不可信的 Tcl)。 这个语言和 PL/Tcl 是完全一样的,只不过使用了一个完整的 Tcl 解释器。如果你使用了 PL/TclU,那么你必须把它安装成一种不可信的过程语言, 这样只有数据库超级用户可以用它创建函数。PL/TclU函数的作者必须注意: 你写的函数一定不要做任何预算外的事情,因为它能干所有数据库管理员能干的事情。

如果在安装过程的配置步骤中声明了 Tcl 支持,那么PL/Tcl和PL/TclU 的调用处理器是在制作时自动制作并安装到PostgreSQL库目录中去的。 要在某个特定的数据库中安装PL/Tcl和/或PL/TclU, 那么你可以使用CREATE EXTENSION命令或createlang程序。 比如createlang pltcl _dbname_createlang pltclu _dbname_