VastbaseE100

基于开源技术的HTAP数据库管理系统。性能优异,稳定可靠,提供诸多专属领域特性。

Menu

CREATE LANGUAGE

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

语法格式

CREATE [ OR REPLACE ] [ PROCEDURAL ] LANGUAGE name
CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE name
    HANDLER call_handler [ INLINE inline_handler ] [ VALIDATOR valfunction ]][ VALIDATOR valfunction ]

说明

CREATE LANGUAGE 使用Vastbase E100数据库注册新的过程语言。随后,可以用这种新语言定义函数和过程。

注意

大多数过程语言都被制作成”扩展”,因此应该安装 [CREATE EXTENSION而不是 CREATE LANGUAGE 。现在应将 CREATE LANGUAGE的直接使用限制在扩展安装脚本中。如果数据库中有”裸”语言(可能是升级后的结果),则可以使用CREATE EXTENSION langname FROM unpackaged 将其转换为扩展名。

CREATE LANGUAGE有效地将语言名称与负责执行用该语言编写的函数的处理函数相关联。

CREATE LANGUAGE命令有两种形式。在第一种形式中,用户只提供所需语言的名称,Vastbase E100服务器查询pg_pltemplate系统目录以确定正确的参数说明。在第二种形式中,用户提供语言参数说明以及语言名称。第二种形式可用于创建pg_pltemplate 中未定义的语言,但此方法被视为过时。

当服务器在 pg_pltemplate目录中找到给定语言名称的条目时,即使该命令包含语言参数说明,它也将使用目录数据。此行为简化了旧转储文件的加载,这些转储文件可能包含有关语言支持功能的过时信息。

通常,用户必须具有Vastbase E100超级用户权限才能注册新语言。但是,如果语言在 pg_pltemplate目录中列出并且标记为允许由数据库所有者创建( tmpldbacreate为true),则数据库的所有者可以在该数据库中注册新语言。默认情况下,数据库所有者可以创建受信任的语言,但超级用户可以通过修改pg_pltemplate的内容来调整,语言的创建者成为其所有者,以后可以删除它,重命名或将其分配给新的所有者。

CREATE OR REPLACE LANGUAGE将创建新语言,或替换现有定义。如果语言已存在,则其参数说明将根据指定的值或从pg_pltemplate获取,但语言的所有权和权限设置不会更改,并且假定使用该语言编写的任何现有函数仍然有效。除了创建语言的普通权限要求之外,用户还必须是现有语言的超级用户或所有者。REPLACE 案例主要用于确保语言存在。如果语言具有 pg_pltemplate 条目,则REPLACE 实际上不会更改现有定义的任何内容,除非在创建语言后修改了pg_pltemplate 条目的特殊情况。

参数说明

  • TRUSTED

    TRUSTED指定该语言不会授予用户不该具有的 数据访问。如果在注册语言时这个关键词被省略,只有具有Vastbase E100超级用户特权的用户才能 使用该语言创建新函数。

  • PROCEDURAL

    这是一个噪声词。

  • name

    新过程语言的名称。该名称必须在该数据库的语言中唯一。 为了向后兼容,名称可以用单引号围绕。

  • HANDLER call_handler

    call_handler 是一个之前注册的函数的名称,它将被调用来执行该过程语言的函数。 一种过程语言的调用处理器必须以一种编译型语言(如 C)编写并且 具有版本 1 的调用约定,它必须在 PostgreSQL内注册为一个没有 参数并且返回language_handler类型的函数。 language_handler是一种占位符类型, 它被用来 标识该函数为一个调用处理器。

  • INLINE inline_handler

    inline_handler 是一个之前注册的函数的名称,它将被调用来执行一个该语言的匿名代码块( DO命令)。如果没有指定 inline_handler函数,则 该语言不支持匿名代码块。该处理器函数必须接受一个internal 类型的参数,该参数将是DO命令的内部表示,而且它通常 将返回void。该处理器的返回值会被忽略。

  • VALIDATOR valfunction

    valfunction is the 是一个之前注册的函数的名称,当一个该语言的新函数被创建时会调用该函数来 验证新函数。如果没有指定验证器函数,那么一个新函数被创建时不会被检查。 验证器函数必须接受一个oid类型的参数,它将是要被创建的 函数的 OID,而且它通常将返回void。 一个验证器函数通常会检查函数体中的语法正确性,但是它也能查看函数的其他 属性,例如该语言能否处理特定的参数类型。为了发出一个错误,验证器函数应该 使用ereport()函数。验证器函数的返回值会被忽略。

如果指定的语言名称在pg_pltemplate中有一项,服务器会忽略 TRUSTED选项和支持函数的名称。

注意事项

使用 DROP LANGUAGE 删除过程语言。

系统目录 pg_language 记录有关当前安装的语言的信息。此外,psql命令 dL列出已安装的语言。

要使用过程语言创建函数,用户必须具有该语言的 USAGE 特权。默认情况下,USAGE 被授予 PUBLIC (即每个人)的可信任语言。如果需要,可以撤销此操作。

过程语言是各个数据库的本地语言。但是,可以在 template1数据库中安装一种语言,这将使其在所有后续创建的数据库中自动可用。

如果服务器在 pg_pltemplate中没有该语言的条目,则必须已存在调用处理函数,内联处理函数(如果有)和验证器函数(如果有)。但是当有条目时,函数不需要存在;如果数据库中不存在,它们将自动定义。(如果安装中没有实现该语言的共享库,则可能导致 CREATE LANGUAGE 失败。)

示例

创建任何标准过程语言的首选方法是:

CREATE LANGUAGE plperl;

对于 pg_pltemplate 目录中未知的语言,需要这样的序列:

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