# 44.1.概述
PL/Tcl提供了函数编写器在C语言中拥有的大部分功能,但有一些限制,并添加了Tcl可用的强大字符串处理库。
一个引人注目的好的限制条件是,所有操作都是在Tcl解释器的安全上下文中执行的。除了safe Tcl有限的命令集之外,只有少数命令可以通过SPI访问数据库,并通过SPI发送消息埃洛格()
.PL/Tcl不能像C函数那样访问数据库服务器的内部,也不能在PostgreSQL server进程的权限下获得操作系统级的访问权限。因此,可以信任没有特权的数据库用户使用这种语言;它并没有赋予他们无限的权力。
另一个值得注意的实现限制是Tcl函数不能用于为新数据类型创建输入/输出函数。
有时,编写不限于安全Tcl的Tcl函数是可取的。例如,可能需要一个发送电子邮件的Tcl功能。为了处理这些情况,PL/Tcl的一个变体称为PL/TclU
(适用于不受信任的Tcl)。除了使用完整的Tcl解释器之外,这是完全相同的语言。如果使用PL/TclU,则必须将其作为不受信任的过程语言安装这样,只有数据库超级用户才能在其中创建函数。PL/TclU函数的编写者必须注意,该函数不能用于做任何不需要的事情,因为它将能够做任何可以由作为数据库管理员登录的用户完成的事情。
如果在安装过程的配置步骤中指定了Tcl支持,PL/Tcl和PL/TclU调用处理程序的共享目标代码将自动生成并安装在PostgreSQL库目录中。要在特定数据库中安装PL/Tcl和/或PL/TclU,请使用创建扩展
例如,命令创建扩展pltcl
或创建扩展pltclu
.