PL/Tcl 提供了 C 语言中函数编写者的许多功能;但也有一些限制,且增加了适用于 Tcl 的强大字符串处理库。
一个令人信服的好思考限制是在Tcl解释器的上下文中从安全内部执行所有操作。除了受限的Tcl命令集外,只有极少的命令可以访问数据库通过SPI和通过elog()
来增加消息。PL/Tcl不会提供任何方法访问数据库服务器的内部或在PostgreSQL服务器进程的权限下获得操作系统级别权限,而C函数可以做到。因此,可以信任非特权数据库用户使用此语言;它不会赋予他们无限权限。
另一个显著的实现限制是Tcl函数不能用于为新数据类型创建输入/输出函数。
有时候需要编写不受限于受限的Tcl的Tcl函数。例如,可能想要一个发送电子邮件的Tcl函数。为了处理这些情况,有一种称为PL/TclU
(用于不受信任的Tcl)的PL/Tcl变体。除了使用完整的Tcl解释器外,它与该语言完全相同。如果使用PL/TclU,则必须将其作为不受信任的过程语言安装,以便只有数据库的超级用户可以在其中创建函数。PL/TclU函数的编写者必须注意,函数不能用于做任何不想要的事情,因为它可以执行数据库管理员登录用户可以做到的任何操作。
PL/Tcl和PL/TclU调用处理器的共享对象代码如果在安装过程的配置步骤中指定了Tcl支持,则自动构建并安装在PostgreSQL库目录中。要在一个特定数据库中安装PL/Tcl和/或PL/TclU,请使用CREATE EXTENSION
命令,例如 CREATE EXTENSION pltcl
或CREATE EXTENSION pltclu
。