plperlu

PL/PerlU 存储过程语言(未受信/高权限)

概览

扩展包名版本分类许可证语言
plperlu1.0LANGPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
3270plperlupg_catalog
3271bool_plperlu-
3272jsonb_plperlu-
3273hstore_plperlu-
相关扩展plperlu plperl plluau pltclu bool_plperl hstore_plperl jsonb_plperl plpgsql plv8
下游依赖bool_plperlu hstore_plperlu jsonb_plperlu plperlu pg_utl_smtp sparql

版本

PG18PG17PG16PG15PG14
1.01.01.01.01.0

安装

提示:这是 PostgreSQL 内核自带的 contrib 扩展

CREATE EXTENSION plperlu;

用法

plperlu: PL/Perl 不受信过程语言

PL/Perl 不受信版本提供完整的 Perl 功能,包括加载外部模块、访问文件系统和网络操作。只有超级用户可以使用此语言创建函数。

CREATE EXTENSION plperlu;

-- 使用外部 CPAN 模块
CREATE FUNCTION fetch_url(text) RETURNS text
LANGUAGE plperlu AS $$
  use LWP::Simple;
  my ($url) = @_;
  return get($url);
$$;

-- 从服务器文件系统读取文件
CREATE FUNCTION read_server_file(text) RETURNS text
LANGUAGE plperlu AS $$
  my ($path) = @_;
  open my $fh, '<', $path or die "Cannot open $path: $!";
  local $/;
  my $content = <$fh>;
  close $fh;
  return $content;
$$;

-- 使用外部模块处理 JSON
CREATE FUNCTION parse_json_key(text, text) RETURNS text
LANGUAGE plperlu AS $$
  use JSON;
  my ($json_str, $key) = @_;
  my $data = decode_json($json_str);
  return $data->{$key};
$$;

-- 使用 Net::SMTP 发送邮件
CREATE FUNCTION send_email(text, text, text) RETURNS boolean
LANGUAGE plperlu AS $$
  use Net::SMTP;
  my ($to, $subject, $body) = @_;
  my $smtp = Net::SMTP->new('localhost');
  $smtp->mail('postgres@localhost');
  $smtp->to($to);
  $smtp->data();
  $smtp->datasend("Subject: $subject\n\n$body");
  $smtp->dataend();
  $smtp->quit();
  return 1;
$$;

最后修改 2026-03-14: update extension metadata (953cbd0)