44.1. Overview

PL/Tcl 提供了函数编写者在 C 语言中具有的大多数功能,但有一些限制,并添加了可用于 Tcl 的强大的字符串处理库。

一个令人信服的限制是,一切都在 Tcl 解释器上下文的安全范围内执行。除了安全 Tcl 的命令集受限制外,只有少数命令可通过 SPI 访问数据库并通过elog()引发消息。 PL/Tcl 不能像 C 函数那样在 PostgreSQL 服务器进程的许可下提供访问数据库服务器内部或获得 OS 级访问的方法。因此,非特权数据库用户可以信任使用该语言。它并没有赋予他们无限的权力。

另一个值得注意的实现限制是 Tcl 函数不能用于为新数据类型创建 Importing/输出函数。

有时,希望编写不限于安全 Tcl 的 Tcl 函数。例如,可能需要发送电子邮件的 Tcl 函数。为了处理这些情况,有一个 PL/Tcl 的变种,称为PL/TclU(用于不受信任的 Tcl)。除了使用完整的 Tcl 解释器外,这是完全相同的语言。 如果使用 PL/TclU,则必须将其安装为不受信任的过程语言,以便只有数据库超级用户才能在其中创建函数。 PL/TclU 函数的编写者必须注意,该函数不能用于执行不需要的任何操作,因为它可以执行以数据库 Management 员身份登录的用户可以执行的任何操作。

如果在安装过程的配置步骤中指定了 Tcl 支持,则 PL/Tcl 和 PL/TclU 调用处理程序的共享对象代码将自动构建并安装在 PostgreSQL 库目录中。要在特定数据库中安装 PL/Tcl 和/或 PL/TclU,请使用CREATE EXTENSION命令,例如CREATE EXTENSION pltclCREATE EXTENSION pltclu