过程语言必须“安装”到每个要使用它的数据库中。但是,安装在数据库template1
中的过程语言会自动在随后创建的所有数据库中可用,因为template1
中的条目将由CREATE DATABASE
复制。因此,数据库管理员可以决定哪些语言在哪些数据库中可用,并且可以根据需要使某些语言默认可用。
对于随标准分发版提供的语言,只需执行CREATE EXTENSION
language_name
即可将语言安装到当前数据库中。下面描述的手动过程仅建议用于安装未打包为扩展的语言。
手动安装过程语言
过程语言安装在数据库中需要五个步骤,这些步骤必须由数据库超级用户执行。在大多数情况下,所需的 SQL 命令应打包为扩展的安装脚本,以便可以使用CREATE EXTENSION
执行它们。
语言处理程序的共享对象必须编译并安装到适当的库目录中。这与构建和安装具有常规用户定义的 C 函数的模块的方式相同;请参阅第 36.10.5 节。通常,语言处理程序将依赖于提供实际编程语言引擎的外部库;如果是这样,也必须安装该库。
必须使用以下命令声明处理程序:
CREATE FUNCTIONhandler_function_name
() RETURNS language_handler AS 'path-to-shared-object
' LANGUAGE C;
language_handler
的特殊返回类型告诉数据库系统此函数不返回已定义的SQL数据类型,并且不能直接在SQL语句中使用。
可选地,语言处理程序可以提供一个“内联”处理程序函数,该函数执行用此语言编写的匿名代码块(DO
命令)。如果语言提供了内联处理程序函数,请使用以下命令声明它:
CREATE FUNCTIONinline_function_name
(internal) RETURNS void AS 'path-to-shared-object
' LANGUAGE C;
可选地,语言处理程序可以提供一个“验证器”函数,该函数在不实际执行的情况下检查函数定义的正确性。如果存在,则CREATE FUNCTION
将调用验证器函数。如果语言提供了验证器函数,请使用以下命令声明它:
CREATE FUNCTIONvalidator_function_name
(oid) RETURNS void AS 'path-to-shared-object
' LANGUAGE C STRICT;
最后,必须使用以下命令声明 PL:
CREATE [TRUSTED] LANGUAGElanguage_name
HANDLERhandler_function_name
[INLINEinline_function_name
] [VALIDATORvalidator_function_name
] ;
可选关键字TRUSTED
指定语言不会授予用户原本没有的访问数据权限。受信任的语言专为普通数据库用户(没有超级用户权限的用户)设计,并允许他们安全地创建函数和过程。由于 PL 函数是在数据库服务器内部执行的,因此TRUSTED
标志仅应用于不允许访问数据库服务器内部或文件系统的语言。PL/pgSQL、PL/Tcl 和 PL/Perl 被认为是受信任的;PL/TclU、PL/PerlU 和 PL/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/Tcl 和 PL/TclU 的处理程序将在库目录中构建和安装,但语言本身默认不会安装在任何数据库中。同样,如果配置了 Perl 支持,则将构建和安装 PL/Perl 和 PL/PerlU 处理程序,如果配置了 Python 支持,则将安装 PL/PythonU 处理程序,但这些语言默认不会安装。
如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符,或者需要进一步说明,请使用此表单报告文档问题。