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