Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104824237
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-07 22:56:30

 





第十二章


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;


To be continued......



出处:南方Linux
阅读(853) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~