主页 > 知识库 > 数据库 > PostgreSQL >

任意编程语言访问PostgreSQL:Tcl接口

来源: 作者: 发表于:2012-06-11 08:23  点击:
Tcl语言因其字符串处理能力而闻名,因此如果想要更好地分析查询结果,那么Tcl语言是个很好的选择。其另一个很棒的特性是安全,因为PL/Tcl(即PostgreSQL提供的集成Tcl接口)无法访问数据库服务器内部的工作。不过,如果要想获取更多能力,可以参考PL/TclU,U表

   Tcl语言因其字符串处理能力而闻名,因此如果想要更好地分析查询结果,那么Tcl语言是个很好的选择。其另一个很棒的特性是安全,因为PL/Tcl(即PostgreSQL提供的集成Tcl接口)无法访问数据库服务器内部的工作。不过,如果要想获取更多能力,可以参考PL/TclU,U表示Untrusted(不可信的)。要用它访问数据库,需要用户为超级用户,并且通常也需要更加小心。

  相关文章:

  任意语言访问PostgreSQL:C语言接口

  任意编程语言访问PostgreSQL:C++接口

  任意编程语言访问PostgreSQL:PHP接口

  由于PL/Tcl是默认集成的,使用之前用户无需安装任何东西,但需要将以下语句添加到要使用PL/Tcl的代码中:


CREATE EXTENSION pltcl #or pltclu



  由于PL/Tcl集成到Postgres系统中,与查询和事务处理相比,其对函数与触发器更有用。通常情况下,比起集成一个完整的数据库环境来说,以PL/开头的语言对能力的扩展更加有效,创建用户自己函数的语法格式如下所示:


CREATE FUNCTION name (argtypes) RETURNS type AS $$
#这里为函数体
$$ LANGUAGE pltcl;



  例如为一个简单的相加函数示例:


CREATE FUNCTION tcl_add (integer, integer) RETURNS integer AS $$
    return $1 + $2
$$ LANGUAGE pltcl;



  如果在句末使用LANGUAGE指令的同时使用STRICT,则不必判断输入是否为null。如果不想使用STRICT,可以使用一些if模块和argisnull关键字(点击这里查看更多详细信息)。

  使用数据库中的值很简单。例如,假设用户有一个电脑规格表,并且想要使用一个函数查看硬件是否过时以及是否需要更换,可以使用如下代码:


CREATE TABLE machine (
    name text,
    cpuspeed integer #Mhz
    memory integer #MB
    hard_drive integer #GB
);
CREATE FUNCTION isObsolete (machine) RETURNS boolean AS $$
    if {$1(cpuspeed) < 266 && $1(memory) < 256 && $1(hard_drive) < 2} {
        return "t"
    }
return "f"
$$ LANGUAGE pltcl;



  可以用“spi”(server programming interface - 服务器编程接口)助记符为前缀的系列函数在Postgres数据库中进行选择(select)、插入(insert)及更新(update)对象。spi函数如spi_exec、spi_prepare、spi_execp和quote等,与libpq中的PQ函数类似。spi_exec执行一个SQL命令,返回处理的行数。用户可以指定返回的最大行数,并且将选择的列的值保存到Tcl变量中,如下所示:


spi_exec "SELECT count(*) AS cnt FROM mytable"



  spi_prepare比较并存储查询结果供以后使用,用户可以用spi_execp函数对这些数据进行处理。spi_prepare会返回一个查询ID,因此spi_execp知道要处理哪些数据。当使用单引号和/或转义字符时,quote符号十分有用。示例如下:


"SELECT $myvar AS ret"
# myvar 包含字符串 "won't"
# 当展开时,分析器会给出错误提示
"SELECT '[ quote $val ]' AS ret" # 这么表示则没有问题




    有帮助
    (0)
    0%
    没帮助
    (0)
    0%