关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
流计算引擎
灾难恢复
系统配置参数
索引
扩展
SQL 参考
常见问题(FAQ)
定义一种新的过程化语言。
CREATE [ OR REPLACE ] [ PROCEDURAL ] LANGUAGE <name>
CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE <name>
HANDLER <call_handler>
[ INLINE <inline_handler> ]
[ VALIDATOR <valfunction> ]
CREATE LANGUAGE 命令用于向数据库注册一种新的过程语言。注册完成后,即可在此新语言中定义函数和过程。
注意! 数据库的程序化语言已被归类为"扩展",因此应通过
CREATE EXTENSION命令安装,而非CREATE LANGUAGE。直接使用CREATE LANGUAGE应仅限于扩展安装脚本中。若数据库中存在"裸语言"(可能是升级操作导致),可通过CREATE EXTENSION <langname>FROM unpackaged将其转换为扩展。
CREATE LANGUAGE 命令将语言名称与负责执行该语言编写函数的处理程序函数关联起来。
CREATE LANGUAGE 命令有两种形式。第一种形式中,用户仅需提供所需语言的名称,数据库服务器将通过查询 pg_pltemplate 系统目录来确定正确参数。第二种形式中,用户需同时提供语言名称及相关参数。此形式可用于创建未在 pg_pltemplate 中定义的语言,但该方法已被视为过时。
当服务器在 pg_pltemplate 目录中找到指定语言名称的条目时,即使命令包含语言参数,它也会使用目录数据。这种行为简化了旧转储文件的加载过程,因为这些文件可能包含过时的语言支持函数信息。
通常情况下,用户必须拥有数据库超级用户权限才能注册新语言。但若该语言已在pg_pltemplate目录中列出,且被标记为允许数据库所有者创建(即tmpldbacreate为true),则数据库所有者可在其数据库内注册新语言。默认情况下,受信任语言可由数据库所有者创建,但超级用户可通过修改 pg_pltemplate 内容调整此权限。语言创建者自动成为其所有者,后续可执行删除、重命名或移交所有权操作。
CREATE OR REPLACE LANGUAGE 语句将创建新语言或替换现有定义。若语言已存在,其参数将根据指定值或从 pg_pltemplate 获取的值更新,但语言的所有权和权限设置保持不变,且用该语言编写的现有函数仍被视为有效。除创建语言的常规权限要求外,用户必须是超级用户或现有语言的所有者。REPLACE 模式主要用于确保语言存在。若语言已有 pg_pltemplate 条目,则 REPLACE 不会实际修改现有定义——除非出现特殊情况:即语言创建后 pg_pltemplate 条目曾被修改。
注意! 如果服务器在
pg_pltemplate中已存在指定语言名称的条目,则会忽略TRUSTED选项及支持函数名称。
使用 DROP LANGUAGE 删除过程语言。
系统目录 pg_language 记录当前安装语言的信息。此外,psql 命令 \dL 可列出已安装的语言。
要在过程化语言中创建函数,用户必须拥有该语言的USAGE权限。默认情况下,受信任语言的USAGE权限授予PUBLIC(所有人)。如有需要,可撤销该权限。
过程语言属于单个数据库的本地资源。但若将语言安装至模板数据库(template1),则该语言将自动在后续创建的所有数据库中生效。
若服务器未在pg_pltemplate中为该语言创建条目,则调用处理函数、内联处理函数(若有)及验证函数(若有)必须预先存在。但若已存在条目,则无需预先定义这些函数;若数据库中不存在,它们将被自动定义。(若实现该语言的共享库在安装环境中不可用,这可能导致CREATE LANGUAGE命令失败。)
创建任何标准过程化语言的首选方式是使用 CREATE EXTENSION 而不是 CREATE LANGUAGE。例如:
CREATE EXTENSION plperl;
对于在 pg_pltemplate 目录中未知的语言,需要使用如下序列:
CREATE FUNCTION plsample_call_handler() RETURNS
language_handler
AS '$libdir/plsample'
LANGUAGE C;
CREATE LANGUAGE plsample
HANDLER plsample_call_handler;
CREATE LANGUAGE 是一个数据库扩展。
ALTER LANGUAGE, CREATE EXTENSION, CREATE FUNCTION, DROP LANGUAGE, GRANT, DO