41.1. 安装过程语言

必须将过程语言“安装”到要使用它的每个数据库中。但是安装在数据库template1中的过程语言会自动在所有随后创建的数据库中使用,因为它们在template1中的条目将由CREATE DATABASE复制。因此,数据库 Management 员可以决定在哪些数据库中可以使用哪些语言,并且可以根据需要在默认情况下使某些语言可用。

对于标准发行版随附的语言,只需执行CREATE EXTENSION * language_name *即可将该语言安装到当前数据库中。仅建议安装以下未打包为 extensions 的语言的以下手动步骤。

手动程序语言安装

程序语言分五个步骤安装在数据库中,必须由数据库超级用户执行。在大多数情况下,应将所需的 SQL 命令打包为“extensions”的安装脚本,以便可以使用CREATE EXTENSION来执行它们。

  • 语言处理程序的共享库必须编译并安装到适当的库目录中。这与使用常规的用户定义的 C 函数构建和安装模块的工作方式相同。参见Section 37.9.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] [PROCEDURAL] LANGUAGE language_name
    HANDLER handler_function_name
    [INLINE inline_function_name]
    [VALIDATOR validator_function_name] ;

可选关键字TRUSTED指定该语言不授予对用户否则不具有的数据的访问权限。可信语言是为普通数据库用户(没有超级用户特权的用户)设计的,并允许他们安全地创建函数和触发过程。由于 PL 函数是在数据库服务器内部执行的,因此TRUSTED标志仅应用于不允许访问数据库服务器内部或文件系统的语言。 PL/pgSQL,PL/Tcl 和 PL/Perl 语言被认为是受信任的; PL/TclU,PL/PerlU 和 PL/PythonU 语言旨在提供无限的功能,并且不应被标记为受信任。

Example 41.1显示了手动安装过程如何与 PL/Perl 语言一起使用。

实施例 41.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;

CREATE FUNCTION plperl_validator(oid) RETURNS void AS
    '$libdir/plperl' LANGUAGE C STRICT;

The command:

CREATE TRUSTED PROCEDURAL 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 处理程序,但是默认情况下不会安装这些语言。