42.1. 安装过程语言 #
过程语言必须在每个要使用它的数据库中“安装”。不过,安装在数据库 template1 中的过程语言会自动在随后创建的所有数据库中可用,因为它们在 template1 中的条目会由
CREATE DATABASE 复制。因此,数据库管理员可以决定哪些数据库提供哪些语言,并且如果需要,还可以让某些语言默认可用。
对于标准发行版附带的语言,只需执行
CREATE EXTENSION
language_name,即可将该语言安装到当前数据库中。下文所述的手工过程只建议用于安装那些尚未打包为扩展的语言。
手工安装过程语言
在数据库中安装过程语言需要五个步骤,且必须由数据库超级用户执行。多数情况下,所需的 SQL 命令都应打包成某个“扩展”的安装脚本,这样就可以用 CREATE EXTENSION 来执行它们。
该语言调用处理器的共享对象必须先编译好并安装到合适的库目录中。这与构建和安装含有普通用户定义 C 函数的模块的方法相同;见第 38.10.5 节。该语言调用处理器往往还会依赖一个提供实际编程语言引擎的外部库;如果是这样,该库也必须安装。
必须用如下命令声明该调用处理器:
CREATE FUNCTION
handler_function_name() RETURNS language_handler AS 'path-to-shared-object' LANGUAGE C;特殊返回类型
language_handler会告诉数据库系统,该函数返回的不是某种已定义的 SQL 数据类型,并且不能在 SQL 语句中直接使用。可选地,语言调用处理器可以提供一个“内联”处理器函数,用于执行用该语言编写的匿名代码块(
DO命令)。如果该语言提供了内联处理器函数,可用类似下面的命令声明它:CREATE FUNCTION
inline_function_name(internal) RETURNS void AS 'path-to-shared-object' LANGUAGE C;可选地,语言调用处理器可以提供一个“验证器”函数,用于在不实际执行的情况下检查函数定义是否正确。如果存在验证器函数,
CREATE FUNCTION就会调用它。如果该语言提供了验证器函数,可用类似下面的命令声明它:CREATE FUNCTION
validator_function_name(oid) RETURNS void AS 'path-to-shared-object' LANGUAGE C STRICT;最后,必须用如下命令声明该 PL:
CREATE [TRUSTED] LANGUAGE
language_nameHANDLERhandler_function_name[INLINEinline_function_name] [VALIDATORvalidator_function_name] ;可选关键字
TRUSTED表示,该语言不会授予用户原本不具备的数据访问能力。受信任的语言是为普通数据库用户(即没有超级用户权限的用户)设计的,并允许他们安全地创建函数和过程。由于 PL 函数是在数据库服务器内部执行的,因此只有那些不允许访问数据库服务器内部或文件系统的语言才应带有TRUSTED标记。PL/pgSQL、PL/Tcl 以及 PL/Perl 被认为是受信任的;而 PL/TclU、PL/PerlU 以及 PL/PythonU 旨在提供无限制的功能,因此不应被标记为受信任的。
例 42.1 展示了以 PL/Perl 为例时,手工安装过程是如何进行的。
例 42.1. 手工安装 PL/Perl
下面的命令告诉数据库服务器到哪里查找 PL/Perl 语言调用处理器函数的共享对象:
CREATE FUNCTION plperl_call_handler() RETURNS language_handler AS
'$libdir/plperl' LANGUAGE C;
PL/Perl 具有内联处理器函数和验证器函数,因此我们也声明它们:
CREATE FUNCTION plperl_inline_handler(internal) RETURNS void AS
'$libdir/plperl' LANGUAGE C STRICT;
CREATE FUNCTION plperl_validator(oid) RETURNS void AS
'$libdir/plperl' LANGUAGE C STRICT;
下面的命令:
CREATE TRUSTED LANGUAGE plperl
HANDLER plperl_call_handler
INLINE plperl_inline_handler
VALIDATOR plperl_validator;
随后定义了对于语言属性为 plperl 的函数和过程,应调用前面声明的函数。
在默认的 PostgreSQL 安装中,PL/pgSQL 语言的调用处理器会被构建并安装到“库”目录中;此外,PL/pgSQL 语言本身也安装在所有数据库中。如果在构建时配置了 Tcl 支持,那么 PL/Tcl 和 PL/TclU 的调用处理器会被构建并安装到该库目录中,但这两种语言本身默认并不会安装到任何数据库中。同样,如果在构建时配置了 Perl 支持,就会构建并安装 PL/Perl 和 PL/PerlU 的调用处理器;如果在构建时配置了 Python 支持,则会安装 PL/PythonU 的调用处理器,但这些语言默认也不会安装到任何数据库中。
报告文档问题
阅读 上游文档. 通过 PostgreSQL 文档反馈表单.