支持的版本: 当前 (17) / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 7.3 / 7.2

40.1. 安装过程语言 #

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

对于标准发行版提供的语言,只需要执行 CREATE EXTENSION 语言名称 将该语言安装到当前数据库中即可。下面描述的手动过程仅建议用于安装未打包为扩展的语言。

手动安装过程语言

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

  1. 语言处理程序的共享对象必须编译并安装到适当的库目录中。这与使用常规用户定义的 C 函数构建和安装模块的方式相同;请参见 第 36.10.5 节。通常,语言处理程序将依赖于提供实际编程语言引擎的外部库;如果是这样,也必须安装它。

  2. 必须使用以下命令声明处理程序

    CREATE FUNCTION handler_function_name()
        RETURNS language_handler
        AS 'path-to-shared-object'
        LANGUAGE C;
    

    language_handler 的特殊返回类型告诉数据库系统,此函数不会返回定义的SQL数据类型,并且不能直接在SQL语句中使用。

  3. (可选)语言处理程序可以提供一个 内联 处理函数,该函数执行使用此语言编写的匿名代码块(DO 命令)。如果语言提供了内联处理函数,则使用如下命令声明它

    CREATE FUNCTION inline_function_name(internal)
        RETURNS void
        AS 'path-to-shared-object'
        LANGUAGE C;
    
  4. (可选)语言处理程序可以提供一个 验证器 函数,该函数检查函数定义的正确性而无需实际执行它。如果存在验证器函数,则 CREATE FUNCTION 会调用它。如果语言提供了验证器函数,则使用如下命令声明它

    CREATE FUNCTION validator_function_name(oid)
        RETURNS void
        AS 'path-to-shared-object'
        LANGUAGE C STRICT;
    
  5. 最后,必须使用以下命令声明 PL

    CREATE [TRUSTED] LANGUAGE language_name
        HANDLER handler_function_name
        [INLINE inline_function_name]
        [VALIDATOR validator_function_name] ;
    

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

示例 40.1 显示了手动安装过程如何使用 PL/Perl 语言。

示例 40.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/TclPL/TclU 的处理程序会构建并安装在库目录中,但该语言本身默认不会安装在任何数据库中。同样,如果配置了 Perl 支持,则会构建并安装 PL/PerlPL/PerlU 处理程序,如果配置了 Python 支持,则会安装 PL/PythonU 处理程序,但这些语言默认不会安装。

提交更正

如果您发现文档中有任何不正确、与您特定功能的使用经验不符或需要进一步澄清的地方,请使用此表单报告文档问题。