您的位置:寻梦网首页编程乐园数据库PostgreSQL 7.2 Documentation

CREATE LANGUAGE

Name

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

Synopsis

CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE 

langname


    HANDLER 

call_handler

描述

使用 CREATE LANGUAGE , 一个 PostgreSQL 用户可以在 PostgreSQL 里注册一个新的语言. 因而,函数和触发器过程可以用这种新语言定义.要注册新 语言用户必须具有 PostgreSQL 超级用户权限.

CREATE LANGUAGE 将该语言的名字和一个调用句柄 关联起来,而该调用句柄负责执行该语言书写的函数. 请参考 程序员手册 获取有关语言调用句柄的 更多信息.

请注意过程语言是对每个独立的数据库而言是自己的. 要让一种语言缺省时可以为所有数据库获得,那你应该把它安装到 template1 数据库里.

参数

TRUSTED

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

PROCEDURAL

这是个没有用的字.

langname

新的过程化语言的名称.语言名是大小写无关的. 一个过程化语言不能覆盖 PostgreSQL 内置的语言.

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

HANDLER call_handler

call_handler 是一个以前注册过的函数的名字,该函数将被调用来执行这门过程语言写的 函数.过程语言的调用句柄必须用一种编译语言书写,比如 C,调用风格必须 是版本 1 的调用风格,并且在 PostgreSQL 里注册为不接受参数并且返回 opaque 类型的函数, ( opaque 是用于未声明或未定义类型的占位符). undefined types.

诊断

CREATE
如果语言成功创建,返回此信息.
ERROR:  PL handler function 

funcname

() doesn't exist
如果没有找到函数 funcname (), 则返回此信息.

注意

这条命令通常不应该由用户直接执行. 对于 PostgreSQL 版本里提供的过程语言, 我们应该使用 createlang 脚本, 它将为我们安装正确的调用句柄. ( createlang 也会在内部调用 CREATE LANGUAGE .)

使用 CREATE FUNCTION 命令创建新函数.

使用 DROP LANGUAGE ,或者更好是 droplang 脚本删除一个过程语言.

系统表 pg_language 记录了更多有关 当前安装的过程语言的信息.

        Table "pg_language"
   Attribute   |  Type   | Modifier
---------------+---------+----------
 lanname       | name    |
 lanispl       | boolean |
 lanpltrusted  | boolean |
 lanplcallfoid | oid     |
 lancompiler   | text    |

   lanname   | lanispl | lanpltrusted | lanplcallfoid | lancompiler
-------------+---------+--------------+---------------+-------------
 internal    | f       | f            |             0 | n/a
 C           | f       | f            |             0 | /bin/cc
 sql         | f       | f            |             0 | postgres

目前,一种过程语言创建之后它的定义就不能再更改.

例子

下面两条顺序执行的命令将注册一门新的过程语言及其关联的调用句柄.

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

兼容性

CREATE LANGUAGE PostgreSQL 扩展.

历史

CREATE LANGUAGE 命令第一次出现在 PostgreSQL 6.3.

又见

createlang , CREATE FUNCTION , droplang , DROP LANGUAGE , PostgreSQL 程序员手册