pltcl
PL/Tcl 过程语言
当前查看 PostgreSQL 18.6。
说明
PL/Tcl 过程语言
- 种类
- 随源码提供的过程语言变体
- 操作符家族
- PL/Tcl
- 可信
- t
- 处理函数
- pltcl_call_handler
- 库
- $libdir/pltcl
- 默认版本
- 1.0
- 模块路径
- $libdir/pltcl
- 注释
- PL/Tcl 过程语言
同构建源码中的安装定义
此扩展随源码提供;收录它并不表示已安装该语言或外部运行时。
/* src/pl/tcl/pltcl--1.0.sql */
CREATE FUNCTION pltcl_call_handler() RETURNS language_handler
LANGUAGE c AS 'MODULE_PATHNAME';
CREATE TRUSTED LANGUAGE pltcl
HANDLER pltcl_call_handler;
-- The language object, but not the functions, can be owned by a non-superuser.
ALTER LANGUAGE pltcl OWNER TO @extowner@;
COMMENT ON LANGUAGE pltcl IS 'PL/Tcl procedural language';手册定义
42.1. 概述
PL/Tcl 提供了 C 语言函数作者所拥有的大多数能力,但有少量限制,同时增加了 Tcl 强大的字符串处理库。
一个有益的限制是:所有操作都在 Tcl 解释器上下文的安全边界内执行。除安全 Tcl 的有限命令集外,仅提供少量命令,用于通过 SPI 访问数据库或通过 elog() 报告消息。PL/Tcl 无法像 C 函数那样访问数据库服务器内部,也无法以 PostgreSQL 服务器进程的权限访问操作系统。因此,可以信任无特权数据库用户使用此语言,它不会赋予他们不受限制的权限。
另一项值得注意的实现限制是:不能用 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。
相关条目
文档与源码
来源构建
- 版本
- 18.6
- 构建
- https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2
- 来源指纹
555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f
版本比较
PostgreSQL 17 → 18: 无变化。
比较已记录的接口与属性,排除来源指纹和构建元数据。某个样本中没有记录,不能据此判断实际引入或移除的版本。
相关条目
导出 JSON · 返回过程语言 · 收录范围为 PostgreSQL 10 至 20;最早采样版本不一定是实际引入版本。