Chapter 25. PL/Tcl - TCL 过程语言

Table of Contents
25.1. 概述
25.2. 描述
25.2.1. Postgres 函数和 Tcl 过程名
25.2.2. 用 PL/Tcl 定义函数
25.2.3. PL/Tcl 里的全局量
25.2.4. PL/Tcl 里的触发器过程
25.2.5. 从 PL/Tcl 里访问数据库

PL/Tcl 是一种用于 Postgres 数据库系统的可装载的过程化语言, 它让我们可以用 Tcl 语言来创建函数和触发器过程.

这个软件包最初是由 Jan Wieck 开发的.

25.1. 概述

PL/Tcl 提供 C 语言里面函数开发者所拥有的大多数功能,只有一点点限制除外.

好的限制是,所有东西都是在一个安全的 Tcl 解释器里面运行的. 除了安全的 Tcl 一个有限的命令集外,只有很少的几个命令可以通过 SPI 访问数据库以及通过 elog() 生成错误信息.不象 C 函数那样, (Tcl)没有办法访问数据库后端内部或者获得 OS 级的 Postgres 用户 ID 的权限.因此,任何非特 权的数据库用户都可以被允许使用这种语言.

另外的实现级限制是 Tcl 过程不能用于创建新数据库类型的输入/输出函数.

有时候我们需要写一些不受安全 Tcl 限制的 Tcl 函数 --- 比如, 我们可能需要一个可以发送邮件的 Tcl 函数.要处理这样的问题, 我们有一个 PL/Tcl 的变种,叫 PL/TclU(意思是不可信的 Tcl). 这个语言和 PL/Tcl 是完全一样的,只不过使用了一个完整的 Tcl 解释器. 如果你使用了 PL/TclU,那么你必须把它安装成一种不可信的 过程语言,这样只有数据库超级用户可以用它创建函数. PL/TclU 函数的作者必须注意∶你写的函数一定不要做任何预算外的事情, 因为它能干所有登录为数据库管理员的用户能干的事情.

如果在安装过程的配置步骤中声明了 Tcl/TK 支持,那么 PL/TCL 和 PL/TclU 的调用句柄是在制作时自动制作并安装到 Postgres 库目录中去的. 要在某个特定的数据库中安装 PL/Tcl 和/或 PL/TclU,那么你 可以使用 createlang 脚本.