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

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 8.0 已于 2010 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

CREATE LANGUAGE

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

大纲

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

描述

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

CREATE LANGUAGE实际上是将该语言名称与负责执行 用这种语言编写的函数的处理器函数关联起来。关于语言处理器的更多信息, 参见第 34 章。

注意,过程语言是各个数据库本地的。要让某种语言默认在所有数据库中可用, 应把它安装到template1数据库中。

参数

TRUSTED

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

PROCEDURAL

这是一个噪声词。

name

新过程语言的名称。语言名称不区分大小写。该名称必须在与数据库中的其他语言名称不同。

为了向后兼容,名称可以用单引号括起来。

HANDLER call_handler

call_handler 是一个先前注册的函数名称,它会被调用来执行该过程语言中的函数。 过程语言的调用处理器必须使用某种编译型语言(例如 C)编写,并采用 版本 1 调用约定。它必须在PostgreSQL 中注册为一个不带参数且返回language_handler类型的 函数。该返回类型是一种占位符类型,仅用于把 该函数标识为调用处理器。

VALIDATOR valfunction

valfunction 是一个先前注册的函数名称,在创建该语言中的新函数时会调用它来验证 该新函数。如果没有指定验证器函数,那么新函数在创建时不会被检查。 验证器函数必须接受一个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扩展。

提交更正

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