PostgreSQL7.0手册-用户手册-12. PL/perl - Perl 过程语言

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 13:41:35
第十二章. PL/perl - Perl 过程语言
内容 
概述 
制做和安装 
使用 PL/Perl 
本章描述如何编译,安装和使用 PL/Perl. 
概述
PL/Perl 允许你用 Perl 脚本语言书写可以用于 SQL 查询的函数,就好象它们是内建在 Postgres 里一样. 
PL/Perl 解释器是一个完整的 Perl 解释器.不过,有些操作出于安全性的考虑被屏蔽掉了. 

通常,被限制的操作是那些于环境交互的动作.包括文件句柄操作,请求和使用(对于外部模块而言). 

要知道,安全不是绝对的.实际上,有几种拒绝服务攻击仍然是可能的-存储器耗尽和无限循环就是两个例子. 


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

制作和安装
假设 Postgres 源代码树的根是 $PGSRC,那么 Pl/perl 源代码位于 $PGSRC/src/pl/plperl. 
要制作,只需要按照下面步骤处理: 

cd $PGSRC/src/pl/plperl
perl Makefile.PL
make
这样做将创建共享库文件.在一个 Linux 系统里,它将被叫做 plperl.so.在其他系统里的扩展名可能不同. 
然后应该把该共享库拷贝到 postgres 安装的 lib 子目录下. 

createlang 命令用于将该语言安装到一个数据库中.如果它被安装到 template1 里面,以后创建的所有数据库将自动安装这个语言.


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

使用 PL/Perl
假设你有下面的表: 
CREATE TABLE EMPLOYEE (
    name text,
    basesalary int4,
    bonus int4 );
为了获取所有的薪水(本金+奖励),我们将定义下面这样的函数: 
CREATE FUNCTION totalcomp(int4, int4) RETURNS int4
    AS 'return $_[0] + $_[1]'
    LANGUAGE 'plperl';
请注意参数会象想象的那样以 @_ 形式传递给函数.还有,因为 SQL 创建函数的引号规则,你会发现你要比平常更频繁地使用扩展的引号函数(qq[],q[],qw[]). 
我们现在可以象下面这样使用我们的函数. 

SELECT name, totalcomp(basesalary, bonus) from employee
不过,我们还可以把我们的整个记录传递个我们的函数: 
CREATE FUNCTION empcomp(employee) returns int4
    AS 'my $emp = shift;
        return $emp->{'basesalary'} + $emp->{'bonus'};'
    LANGUAGE 'plperl';
记录是作为一个散列(哈希 hash)数组的引用传递的.脚标是记录里面的字段名称.值是记录里面对应的字段的值. 
新函数 empcomp 可以这样使用: 

SELECT name, empcomp(employee) from employee;

--------------------------------------------------------------------------------

Tags:

作者:佚名
分享到: 微信 更多