2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不受支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2

42.1. 概述 #

PL/Tcl 提供了大部分 C 语言函数编写者所拥有的功能,但有一些限制,并且增加了 Tcl 强大的字符串处理库。

一个令人信服的良好限制是,所有内容都在 Tcl 解释器的安全上下文中执行。除了安全 Tcl 的有限命令集外,只有少数命令可用于通过 SPI 访问数据库并通过 elog() 提高消息级别。PL/Tcl 不提供访问数据库服务器内部或在 C 函数可以执行的 PostgreSQL 服务器进程权限下获得操作系统级别访问的方法。因此,可以信任未授权的数据库用户使用此语言;它不会赋予他们无限的权限。

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

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

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

提交更正

如果您在文档中看到任何不正确的内容、与您对特定功能的体验不符的内容,或需要进一步澄清的内容,请使用 此表单 报告文档问题。