Chapter 20. PL/Tcl - Tcl 过程语言

Table of Contents
20.1. 概述
20.2. 描述
20.2.1. PL/Tcl 函数和参数
20.2.2. PL/Tcl 里的数据值
20.2.3. PL/Tcl 里的全局量
20.2.4. 在 PL/Tcl 里面访问数据库
20.2.5. PL/Tcl 里的触发器过程
20.2.6. 模块和unknown(未知)的命令
20.2.7. Tcl 过程名字

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

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

20.1. 概述

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

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

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

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

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