# 42.1.安装过程语言
程序语言必须“安装”到要使用它的每个数据库中。但是数据库中安装了过程语言模板1
在随后创建的所有数据库中自动可用,因为它们的条目模板1
将由创建数据库
。因此,数据库管理员可以决定哪些数据库中有哪些语言可用,并且如果需要,可以在默认情况下使某些语言可用。
对于标准发行版提供的语言,只需要执行创建扩展
*语言名称
*将语言安装到当前数据库中。下面介绍的手动过程仅建议用于安装尚未打包为扩展的语言。
手动过程语言安装
程序语言分五步安装到数据库中,必须由数据库超级用户执行。在大多数情况下,所需的SQL命令应该打包为“扩展”的安装脚本,以便创建扩展
可以用来执行它们。
语言处理程序的共享对象必须编译并安装到适当的库目录中。这与使用常规用户定义的C函数构建和安装模块的方式相同;看见第38.10.5节.通常,语言处理程序将依赖于提供实际编程语言引擎的外部库;如果是这样,那也必须安装。
必须使用命令声明处理程序
CREATE FUNCTION handler_function_name() RETURNS language_handler AS 'path-to-shared-object' LANGUAGE C;
特殊的返回类型
语言处理器
告诉数据库系统,此函数不返回已定义的SQL数据类型之一,并且不能在SQL语句中直接使用。或者,语言处理程序可以提供执行匿名代码块的“内联”处理程序函数(
做
(命令)用这种语言写的。如果语言提供了内联处理程序函数,请使用以下命令声明它:CREATE FUNCTION inline_function_name(internal) RETURNS void AS 'path-to-shared-object' LANGUAGE C;
或者,语言处理程序可以提供一个“验证器”函数,该函数在不实际执行函数定义的情况下检查函数定义的正确性。验证器函数由
创建函数
如果存在的话。如果该语言提供了一个验证器函数,那么使用如下命令声明它CREATE FUNCTION validator_function_name(oid) RETURNS void AS 'path-to-shared-object' LANGUAGE C STRICT;
最后,必须使用命令声明PL
CREATE [TRUSTED] LANGUAGE language_name HANDLER handler_function_name [INLINE inline_function_name] [VALIDATOR validator_function_name] ;
可选关键字
可信的
指定该语言不授予对用户本来不会拥有的数据的访问权限。可信语言是为普通数据库用户(那些没有超级用户权限的用户)设计的,允许他们安全地创建函数和过程。由于PL函数是在数据库服务器内部执行的可信的
只应为不允许访问数据库服务器内部或文件系统的语言提供标志。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语言的处理程序被构建并安装到“library”目录中;此外,PL/pgSQL语言本身安装在所有数据库中。如果在中配置了Tcl支持,则PL/Tcl和PL/TclU的处理程序将构建并安装在库目录中,但默认情况下,该语言本身不会安装在任何数据库中。同样,如果配置了Perl支持,则会构建和安装PL/Perl和PL/PerlU处理程序,如果配置了Python支持,则会安装PL/PythonU处理程序,但默认情况下不会安装这些语言。