pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
CREATE LANGUAGE — 定义一种新的过程语言
CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGEnameHANDLERcall_handler[ VALIDATORvalfunction]
使用CREATE LANGUAGE, PostgreSQL用户可以在 PostgreSQL数据库中注册一种新的过程语言。随后,就可以用这种新语言定义函数和触发器过程。注册新语言的用户必须拥有 PostgreSQL超级用户权限。
CREATE LANGUAGE实际上把语言名称与一个负责执行以该语言编写的函数的调用处理器关联起来。关于语言调用处理器的更多信息,请参考第 33.3 节。
注意,过程语言是每个数据库局部的。要让一种语言默认在所有数据库中可用,应该把它安装进template1数据库。
TRUSTEDTRUSTED指定该语言的调用处理器是安全的,也就是说,它不会为无特权用户提供任何绕过访问限制的功能。如果注册语言时省略这个关键字,则只有拥有 PostgreSQL超级用户权限的用户能用这种语言创建新函数。
PROCEDURAL这是一个噪声词。
name新过程语言的名称。语言名不区分大小写。该名称在数据库中的语言之间必须唯一。
为了向后兼容,该名称可以用单引号包围。
HANDLER call_handlercall_handler是一个先前已注册函数的名称,该函数将被调用来执行过程语言函数。过程语言的调用处理器必须用 C 之类的编译语言以版本 1 调用约定编写,并作为不带参数、返回 language_handler类型的函数注册到 PostgreSQL中,这个占位类型只是用来把该函数标识为调用处理器。
VALIDATOR valfunctionvalfunction是一个先前已注册函数的名称,当用该语言创建新函数时会调用它来验证新函数。如果没有指定验证器函数,那么新函数在创建时将不被检查。验证器函数必须接受一个 oid类型的参数,它是要创建的函数的 OID,并且通常返回void。
验证器函数通常会检查函数体的语法正确性,但它也可以检查函数的其他属性,例如该语言是否不能处理某些参数类型。要发出错误信号,验证器函数应该使用ereport()函数。函数的返回值会被忽略。
通常用户不应直接执行这条命令。对于 PostgreSQL发行版本中提供的过程语言,应该使用createlang程序,它还会安装正确的调用处理器。(createlang会在内部调用CREATE LANGUAGE。)
在PostgreSQL 7.3 之前的版本中,必须把处理器函数声明为返回占位类型 opaque而不是language_handler。为了支持装载旧的转储文件,CREATE LANGUAGE会接受声明为返回opaque的函数,但会发出一条提示,并把该函数声明的返回类型改为language_handler。
使用CREATE FUNCTION命令创建新函数。
使用DROP LANGUAGE,或者更好的是droplang程序,来删除过程语言。
系统目录pg_language(见第 43.18 节)记录当前已安装语言的信息。此外createlang也有一个列出已安装语言的选项。
过程语言的定义一旦创建就不能更改,权限除外。
要使用一种过程语言,用户必须被授予USAGE权限。如果已知语言是可信的,createlang程序会自动向所有人授予权限。
依次执行下面两条命令将注册一种新的过程语言及相关的调用处理器。
CREATE FUNCTION plsample_call_handler() RETURNS language_handler
AS '$libdir/plsample'
LANGUAGE C;
CREATE LANGUAGE plsample
HANDLER plsample_call_handler;
CREATE LANGUAGE是 PostgreSQL扩展。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。