返回介绍

I. 教程

II. SQL 语言

III. 服务器管理

IV. 客户端接口

V. 服务器端编程

VI. 参考手册

VII. 内部

VIII. 附录

CREATE LANGUAGE

发布于 2019-09-30 03:10:55 字数 3383 浏览 1052 评论 0 收藏 0

名称

CREATE LANGUAGE--定义一种新过程语言

语法

CREATE [ PROCEDURAL ] LANGUAGE name
CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE name
    HANDLER call_handler [ VALIDATOR valfunction ]

描述

CREATE LANGUAGE 可以在 PostgreSQL 数据库里注册一个新的语言。从而可以用这种新语言定义函数和触发器。只有超级用户可以注册新语言。

CREATE LANGUAGE 将该语言的名字和一个负责执行该语言函数的调用处理器关联起来。请参考章36获取有关语言调用处理器的更多信息。

有两种形式的 CREATE LANGUAGE 命令。第一种形式,用户只提供需要的语言的名字,然后 PostgreSQL 服务器参考 pg_pltemplate 系统表来判断正确的参数。第二种形式,用户把语言参数和语言名字一起提供。第二种形式可以用于创建没有在 pg_pltemplate 里面定义的语言,不过这种方法被认为已经过时了。

如果服务器在 pg_pltemplate 系统表里面找到给出的语言名字的纪录,那么它将使用系统表的数据,即使命令包含语言参数也如此。这个行为简化了加载旧的转储文件的过程,因为这些转储文件很可能包含有关语言支持函数的过时信息。

参数

TRUSTED

TRUSTED 说明对该语言的调用处理器是安全的;也就是说,它不会提供给非特权用户任何绕过访问限制的能力。如果忽略这个关键字,只有 PostgreSQL 超级用户可以使用这个语言创建新函数。

PROCEDURAL

这是个没有用的字

name

新过程语言的名称。语言名是大小写无关的。这个名字应该在数据库的所有语言中唯一。

出于向下兼容的原因,这个名字可以用单引号包围。

HANDLER call_handler

call_handler 是一个以前注册过的函数名字,该函数将被用来执行该过程语言的函数。过程语言的调用处理器必须用一种编译语言(比如 C)书写,调用风格必须是版本-1 的调用风格,并且注册为不接受参数并且返回 language_handler 类型的函数。language_handler 是用于将函数声明为调用处理器的占位符。

VALIDATOR valfunction

valfunction 是一个以前注册过的函数名字,在用该语言创建新函数的时候将用它来校验新函数。如果没有声明校验函数,那么建立新函数的时候就不会检查它。校验函数必须接受一个类型为 oid 的参数,它是将要创建的函数的 OID ,并且通常会返回 void

校验函数通常会检查函数体,看看有没有语法错误,但是它也可以查看函数的其它属性,比如该语言是否不能处理某种参数类型。校验函数应该用 ereport() 函数报告错误。该函数的返回值将被忽略。

如果服务器在 pg_pltemplate 系统表里有对应名称的语言纪录,那么 TRUSTED 选项和支持函数的名字等参数将被忽略。

注意

createlang 程序是对 CREATE LANGUAGE 命令的一个简单封装。降低了在 shell 命令行上安装过程语言的难度。

使用 DROP LANGUAGE 命令,或者更好是 droplang 程序来删除一个过程语言。

系统表 pg_language(参阅 节43.20)记录了更多有关当前安装的过程语言的信息。createlang 也有一个选项列出已安装的语言。

要使用一种过程语言创建函数,用户必须对该语言有 USAGE 权限。缺省时,对于可信的语言,USAGE 是赋与 PUBLIC(也就是每个人)的。需要时,这个权限可以撤销。

过程语言是对每个独立数据库本地创建的。不过,语言可以安装到 template1 里面,这样就会导致它自动在所有随后创建的数据库里可用。

如果服务器在 pg_pltemplate 系统表里还没有对应该语言的纪录,那么调用处理器函数和校验函数(如果有)必须已经存在。但是如果存在这样的纪录,那么这些函数就不必已经存在;如果没有在数据库里出现,它们将会被自动定义。如果实现语言的共享库不可获得,那么可能会导致 CREATE LANGUAGE 失效。

在 PostgreSQL 7.3 之前,必须声明处理器函数返回占位类型 opaque ,而不是 language_handler 。为了支持加载旧的转储文件,CREATE LANGUAGE 还将接受声明为返回 opaque 的函数,但是它会发出一条通知并且把函数的返回类型改为 language_handler

例子

创建标准的过程语言的比较好的方法:

CREATE LANGUAGE plpgsql;

对于 pg_pltemplate 还不知道的语言,需要下面这样的序列:

CREATE FUNCTION plsample_call_handler() RETURNS language_handler
    AS '$libdir/plsample'
    LANGUAGE C;
CREATE LANGUAGE plsample
    HANDLER plsample_call_handler;

兼容性

CREATE LANGUAGE 是 PostgreSQL 扩展

又见

ALTER LANGUAGE, CREATE FUNCTION, DROP LANGUAGE, GRANT, REVOKE, createlang, droplang

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文