pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
过程语言必须在每个要使用它的数据库中“安装”。不过,安装在 template1 数据库中的过程语言会自动在随后创建的所有 数据库中可用。因此,数据库管理员可以决定哪 些数据库提供哪些语言,并且如果愿意,也可以让某些语言默认可用。
对于标准发行版自带的语言,可以使用 shell 脚本 createlang 来代替手工完成各个细节。例 如,要把 PL/pgSQL 安装到 template1 数据库,可以使用
createlang plpgsql template1
下文所述的手工过程只建议用于安装 createlang 不认识的自定义语言。
手工安装过程语言
在数据库中安装过程语言需要三个 步骤,且必须由数据库超级用户执行。
该语言调用处理器的共享对象必须先编译好并安装到合适的库目录中。这与 构建和安装含有普通用户定义 C 函数的模块的方法相同;见 第 12.5.7 节。
必须用如下命令声明该调用处理器:
CREATE FUNCTIONhandler_function_name() RETURNS OPAQUE AS 'path-to-shared-object' LANGUAGE C;
特殊返回类型OPAQUE会告诉数据库系统,该函数返 回的不是某种已定义的SQL数据类型,并且不能在 SQL语句中直接使用。
该 PL 必须用如下命令声明:
CREATE [TRUSTED] [PROCEDURAL] LANGUAGElanguage-nameHANDLERhandler_function_name;
可选关键字 TRUSTED 指明是否允许没有超级用户权限的 普通数据库用户使用该语言创建函数和触发器过程。由于 PL 函数是在数据 库服务器内部执行的,TRUSTED 标记只应赋予那些不允 许访问数据库服务器内部或文件系统的语言。语言 PL/pgSQL、 PL/Tcl、 PL/Perl 和 PL/Python 已知是受信任的;而语言 PL/TclU 和 PL/PerlU 旨在提供无限制的功能,因此不应被标记为 受信任的。
在默认的 PostgreSQL 安装中, PL/pgSQL 语言的调用处理器会被构建并安装到 “库”目录中。如果配置了 Tcl/Tk 支持, PL/Tcl 和 PL/TclU 的调用处理器也会被构建并安装到同一 位置。类似地,如果配置了 Perl 支持,PL/Perl 和 PL/PerlU 的调用处理器也会被构建 和安装;如果配置了 Python 支持,则会安装 PL/Python。 createlang 脚本会自动完成上文所述的 步骤 2和 步骤 3。
例 22.1. PL/pgSQL 的手工安装
下面的命令告诉数据库服务器到哪里查找 PL/pgSQL语言调用处理器函数的共享对象:
CREATE FUNCTION plpgsql_call_handler () RETURNS OPAQUE AS
'$libdir/plpgsql' LANGUAGE C;
而命令
CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql
HANDLER plpgsql_call_handler;
则定义对于语言属性为 plpgsql 的函数和触发器过 程,将调用先前声明的调用处理器函数。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。