PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 41. PL/Tcl - Tcl 过程语言 | 下一页

# 41.1. 概述

PL/Tcl 提供 C 语言里面函数开发者所拥有的大多数功能，只有一点点限制除外， 另外Tcl还可以使用强大的字符串处理库。

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

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

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

如果在安装过程的配置步骤中声明了 Tcl 支持，那么PL/Tcl和PL/TclU 的调用处理器是在制作时自动制作并安装到PostgreSQL库目录中去的。 要在某个特定的数据库中安装PL/Tcl和/或PL/TclU， 那么你可以使用`CREATE EXTENSION`命令或`createlang`程序。 比如`createlang pltcl `dbname``或 `createlang pltclu `dbname``。

上一页 | 起始页 | 下一页
PL/Tcl - Tcl 过程语言 | 上一级 | PL/Tcl 函数和参数