🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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_`。