plperl
PL/Perl 存储过程语言
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
plperl | 1.0 | LANG | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 3260 | plperl | 否 | 是 | 否 | 是 | 是 | 否 | pg_catalog |
| 3261 | bool_plperl | 否 | 是 | 否 | 是 | 是 | 否 | - |
| 3262 | hstore_plperl | 否 | 是 | 否 | 是 | 否 | 否 | - |
| 3263 | jsonb_plperl | 否 | 否 | 否 | 是 | 是 | 否 | - |
| 相关扩展 | plperl plperlu bool_plperlu jsonb_plperlu hstore_plperlu plpgsql pg_tle plv8 pllua |
|---|---|
| 下游依赖 | bool_plperl hstore_plperl jsonb_plperl plperl sparql |
版本
| PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|
| 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
安装
提示:这是 PostgreSQL 内核自带的 contrib 扩展
CREATE EXTENSION plperl;
用法
PL/Perl 允许使用 Perl 编写 PostgreSQL 函数。作为受信语言,它在受限环境中运行,无法访问文件系统或外部模块。
CREATE EXTENSION plperl;
-- 简单标量函数
CREATE FUNCTION perl_hello(text) RETURNS text
LANGUAGE plperl AS $$
my ($name) = @_;
return "Hello, $name!";
$$;
SELECT perl_hello('world');
-- 使用 Perl 正则表达式处理文本
CREATE FUNCTION clean_whitespace(text) RETURNS text
LANGUAGE plperl AS $$
my ($str) = @_;
$str =~ s/^\s+|\s+$//g; # 去除首尾空白
$str =~ s/\s+/ /g; # 合并内部空白
return $str;
$$;
-- 返回复合类型
CREATE TYPE name_parts AS (first_name text, last_name text);
CREATE FUNCTION split_name(text) RETURNS name_parts
LANGUAGE plperl AS $$
my ($full) = @_;
my ($first, $last) = split(/\s+/, $full, 2);
return { first_name => $first, last_name => $last };
$$;
-- 集合返回函数
CREATE FUNCTION perl_generate_series(integer, integer) RETURNS SETOF integer
LANGUAGE plperl AS $$
my ($start, $stop) = @_;
for my $i ($start .. $stop) {
return_next($i);
}
return undef;
$$;
-- 触发器函数
CREATE FUNCTION perl_audit_trigger() RETURNS trigger
LANGUAGE plperl AS $$
$_TD->{new}{modified_at} = localtime();
return "MODIFY";
$$;
数据库访问使用 spi_exec_query:
CREATE FUNCTION perl_row_count(text) RETURNS integer
LANGUAGE plperl AS $$
my ($table) = @_;
my $rv = spi_exec_query("SELECT count(*) AS cnt FROM $table");
return $rv->{rows}[0]{cnt};
$$;