CREATE LANGUAGE
CREATE LANGUAGE — 定义一种新的过程语言
大纲
CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGEnameHANDLERcall_handler[ VALIDATORvalfunction]
描述
使用CREATE LANGUAGE,PostgreSQL用户可以在PostgreSQL数据库中注册一种新的过程语言。随后,可以用这种新语言定义函数和触发器过程。用户必须拥有PostgreSQL超级用户权限才能注册新语言。
CREATE LANGUAGE实际上是将该语言名称与负责执行用这种语言编写的函数的处理器函数关联起来。关于语言处理器的更多信息,参见第 34 章。
注意,过程语言是各个数据库本地的。要让某种语言默认在所有数据库中可用,应把它安装到template1数据库中。
参数
TRUSTEDTRUSTED指定该语言的调用处理器是安全的,也就是说,它不会让非特权用户获得任何绕过访问限制的功能。如果在注册该语言时省略这个关键字,只有拥有PostgreSQL超级用户权限的用户才能使用该语言创建新函数。PROCEDURAL这是一个噪声词。
name新过程语言的名称。语言名称不区分大小写。该名称必须在与数据库中的其他语言名称不同。
为了向后兼容,名称可以用单引号括起来。
HANDLERcall_handlercall_handler是一个先前注册的函数名称,它会被调用来执行该过程语言中的函数。过程语言的调用处理器必须使用某种编译型语言(例如 C)编写,并采用版本 1 调用约定。它必须在PostgreSQL 中注册为一个不带参数且返回language_handler类型的函数。该返回类型是一种占位符类型,仅用于把该函数标识为调用处理器。VALIDATORvalfunctionvalfunction是一个先前注册的函数名称,在创建该语言中的新函数时会调用它来验证该新函数。如果没有指定验证器函数,那么新函数在创建时不会被检查。验证器函数必须接受一个oid类型的参数,它将是待创建函数的 OID,并且它通常返回void。验证器函数通常会检查函数体的语法正确性,但它也可以检查函数的其他属性,例如该语言是否支持某些参数类型。要报告错误,验证器函数应使用
ereport()函数。函数的返回值会被忽略。
注解
通常,用户不应直接执行此命令。对于PostgreSQL发行版本中提供的过程语言,应使用createlang程序,它还会安装正确的调用处理器。(createlang会在内部调用CREATE LANGUAGE。)
在 7.3 之前的PostgreSQL版本中,必须将处理器函数声明为返回占位符类型opaque,而不是language_handler。为了支持装载旧转储文件,CREATE LANGUAGE会接受声明为返回opaque的函数,但会发出提示,并将函数声明的返回类型改为language_handler。
使用CREATE FUNCTION命令创建新函数。
使用DROP LANGUAGE删除过程语言,或者更好的方法是使用droplang程序。
系统目录pg_language(见第 41.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扩展。