Table of Contents
PL/Tcl 是一种适用于 PostgreSQL 数据库系统的可载入的过程语言,它允许使用 Tcl 语言 来编写 PostgreSQL 函数和过程。
PL/Tcl 提供了函数编写者在 C 语言中所具备的大部分能力,但会施加少量限制,并额外提供 Tcl 可用的强大字符串处理库。
其中一个颇具吸引力的良性限制是,所有内容都在 Tcl 解释器的安全上下文中执行。除了安全 Tcl 受限的命令集之外,只提供了少数通过 SPI 访问数据库以及通过elog()发出消息的命令。与 C 函数不同,PL/Tcl 不提供访问数据库服务器内部机制的方法,也不能在PostgreSQL服务器进程的权限下获得操作系统级访问。因此,可以信任非特权数据库用户使用这种语言;它不会授予他们无限制的权限。
另一项值得注意的实现限制是,Tcl 函数不能用来为新数据类型创建输入/输出函数。
有时需要编写不受安全 Tcl 限制的 Tcl 函数。例如,可能希望某个 Tcl 函数能够发送电子邮件。为处理这类情况,PL/Tcl 提供了一个名为PL/TclU的变体(其中 U 表示不受信任的 Tcl)。除了使用完整的 Tcl 解释器之外,它与前者是完全相同的语言。如果使用PL/TclU,就必须将其安装为一种不受信任的过程语言,这样就只有数据库超级用户才能在其中创建函数。PL/TclU函数的编写者必须确保该函数不会被用来做任何不希望发生的事情,因为它能够执行任何以数据库管理员身份登录的用户所能做的事情。
如果在安装过程的配置步骤中指定了 Tcl 支持,则PL/Tcl和PL/TclU调用处理器的共享对象代码会自动构建并安装到PostgreSQL的库目录中。要在某个特定数据库中安装PL/Tcl和/或PL/TclU,请使用CREATE EXTENSION命令,例如CREATE EXTENSION pltcl或CREATE EXTENSION pltclu。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。