↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本PostgreSQL 7.2 已于 2007 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

CREATE LANGUAGE

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

大纲

CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE langname
    HANDLER call_handler

描述

使用CREATE LANGUAGE, PostgreSQL用户可以在 PostgreSQL数据库中注册一种新的过程语言。随后,就可以用这种新语言定义函数和触发器过程。注册新语言的用户必须拥有 PostgreSQL超级用户权限。

CREATE LANGUAGE实际上把语言名称与一个负责执行以该语言编写的函数的调用处理器关联起来。关于语言调用处理器的更多信息,请参考Programmer's Guide。

注意,过程语言是每个数据库局部的。要让一种语言默认在所有数据库中可用,应该把它安装进template1数据库。

参数

TRUSTED

TRUSTED指定该语言的调用处理器是安全的,也就是说,它不会为无特权用户提供任何绕过访问限制的功能。如果注册语言时省略该关键字,则只有拥有 PostgreSQL超级用户权限的用户能用这种语言创建新函数。

PROCEDURAL

这是一个噪声词。

langname

新过程语言的名称。语言名不区分大小写。过程语言不能覆盖 PostgreSQL的内建语言之一。

为了向后兼容,该名称可以用单引号包围。

HANDLER call_handler

call_handler是一个先前已注册函数的名称,该函数将被调用来执行过程语言函数。过程语言的调用处理器必须用 C 之类的编译语言以版本 1 调用约定编写,并作为不带参数、返回 opaque类型的函数注册到 PostgreSQL中,这个类型是为未指定或未定义类型准备的占位类型。

诊断

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 程序员指南

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。