【原创】使用Perl写PostgreSQL的触发器

【原创】使用Perl写PostgreSQL的触发器

【原创】使用Perl写PostgreSQL的触发器
简略版本,大概记录了我的操作过程。
详细版本以后有空在写


注意: PostgreSQL 8.0以上的版本才支持使用【Perl触发器】
我使用的 CentOS 4 默认带的 7.4 版本不支持【Perl触发器】,但是可以用perl写普通的函数。

我下载了 8.1.5版本的,安装的时候,记得加上 --with-perl 的参数,打开 PL/Perl 支持。

# 打开数据库的 PL/Perl 支持
createlang plperl template1;
createlang plperlu template1;
# plperl 是安全 PL/Perl。 仅支持简单的perl操作,不能执行不安全的操作
# 例如 :open system use 等 io 操作。
# plperlu 是非安全模式的 PL/Perl 。它几乎支持所有的Perl操作。

使用 phpPgAdmin 为数据库创建一个函数。
函数名随便取
函数的返回值一定要选择 "trigger" ,语言选择 plperlu
定义里面写perl代码。在代码里面可以使用 $_TD 这个 hash引用,里面包括当前触发器的参数
例如我为了调试。写了如下代码
#===
use Data::Dumper;
open (F,">/tmp/pgsql");
print F Dumper($_TD);
close(F);
return undef;
#===
然后在相应的表上用这个函数创建触发器。

在表上执行insert操作,触发 触发器。
发现在 /tmp/下多了一个 pgsql 文件,内容如下

[quote]
$VAR1 = {
'when' => 'AFTER',
'relname' => 'user',
'level' => 'ROW',
'name' => 'user_add',
'new' => {
'email' => '3',
'pwd' => '3',
'id' => '6',
'update' => '3'
},
'relid' => '16631',
'event' => 'INSERT',
'argc' => 0
};
[/quote]

说明触发器正常工作。

==============
注意: 如果函数创建的时候,选择 plperl 则不能创建成功。
因为代码里面包含 use open 等不安全操作。一定要选择 plperlu

=========================
相关文档
http://www.pgsqldb.org/pgsqldoc-8.0c/plperl.html
一直用plpgsql写触发的,用perl可能更灵活吧,有意义。可惜postgresql文档里介绍太少了。
我对plpgsql 不熟悉,我只.
我对plpgsql 不熟悉,我只会用perl

问一下,如果想要使用plpgsql触发器,在 postgresql(mysql) 的另外一个数据库(另外一个库,可能需要重新链接pgsql)插入或者修改数据。应当如何写触发器?
比如:将 pgsql 修改的内容同步到mysql 数据库
这个没试过,好像不行的说.