CREATE LANGUAGE - 定义一种新的过程语言
SYNOPSIS
CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE name
HANDLER call_handler [ VALIDATOR valfunction ]
DESCRIPTION 描述
使用 CREATE LANGUAGE, 一个PostgreSQL 用户可以在 PostgreSQL里注册一个新的语言。 因而,函数和触发器过程可以用这种新语言定义。要注册新语言用户必须具有 PostgreSQL 超级用户权限。
CREATE LANGUAGE 将该语言的名字和一个调用句柄关联起来,而该调用句柄负责执行该语言书写的函数。 请参考
``User-Defined Functions'' 获取有关语言调用句柄的更多信息。
请注意过程语言是对每个独立的数据库而言是自己的。 要让一种语言缺省时可以为所有数据库获得,那你应该把它安装到 template1 数据库里。
PARAMETERS 参数
- TRUSTED
- TRUSTED 说明对该语言的调用句柄是安全的; 也就是说,它不会提供给非特权用户任何绕过访问限制的能力。 如果忽略这个关键字,只有具有
PostgreSQL 超级用户权限的人可以使用这个语言创建新的函数。 - PROCEDURAL
- 这是个没有用的字。
- name
- 新的过程化语言的名称。语言名是大小写无关的。 这个名字应该在数据库的所有语言中唯一。
出于向下兼容的原因,这个名字可以用单引号包围。
- HANDLER call_handler
- call_handler 是一个以前注册过的函数的名字,该函数将被调用来执行这门过程语言写的函数。
过程语言的调用句柄必须用一种编译语言书写,比如 C,调用风格必须是版本 1 的调用风格, 并且在 PostgreSQL 里注册为不接受参数并且返回
language_handler 类型的函数, language_handler 是用于将函数声明为调用句柄的占位符。 - VALIDATOR valfunction
- valfunction 是一个已经注册的函数的名字,
在用该语言创建新函数的时候将调用它来校验新函数。如果没有声明校验函数,那么建立新函数的时候就不会检查它。 校验函数必须接受一个类型为 oid
的参数,它是将要创建的函数的 OID,并且通常会返回 void。校验函数通常会检查函数体,看看看有没有语法错误,但是它也可以查看函数的其它属性, 比如该语言是否不能处理某种参数类型。要发出一个错误,校验函数应该用 elog() 函数。 该函数的返回值将被忽略。
NOTES 注意
这条命令通常不应该由用户直接执行。 对于 PostgreSQL 版本里提供的过程语言, 我们应该使用 createlang(1) 程序, 它将为我们安装正确的调用句柄。 (createlang 也会在内部调用 CREATE LANGUAGE。)
在 PostgreSQL 版本 7.3 之前, 我们必须声明句柄函数返回占位类型 opaque,而不是 language_handler。 为了支持装载旧的转储文件,CREATE LANGUAGE 还将接受声明为返回 opaque 的函数, 但是它会发出一条通知并且把函数声明返回类型改为 language_handler。
使用 CREATE FUNCTION [create_function(7)] 命令创建新函数。
使用 DROP LANGUAGE [drop_language(7)],或者更好是 droplang(1) 程序删除一个过程语言。
系统表 pg_language (参阅 ``System Catalogs'') 记录了更多有关当前安装的过程语言的信息。createlang 也有一个选项列出已安装的语言。
目前,除了权限之外,一种过程语言创建之后它的定义就不能再更改。
要使用一种过程语言,用户必须被赋予 USAGE 权限。 如果该语言已知是可信的,那么 createlang 程序自动给每个人赋予权限。
EXAMPLES 例子
下面两条顺序执行的命令将注册一门新的过程语言及其关联的调用句柄。
CREATE FUNCTION plsample_call_handler() RETURNS language_handler
AS '$libdir/plsample'
LANGUAGE C;
CREATE LANGUAGE plsample
HANDLER plsample_call_handler;
CREATE LANGUAGE - 定义一种新的过程语言的更多相关文章
- python定义一种新类型的元组
# 定义一种新类型的元组,只保留int类型,切只大于0的元素 # 例如:IntTuple([1,-1,"abc",6,['x','y'],3])==>(1,6,3) # 解决 ...
- createlang - 定义一种新的 PostgreSQL 过程语言
SYNOPSIS createlang [ connection-option...] langname [ dbname] createlang [ connection-option...] -- ...
- CREATE CONVERSION - 定义一个用户定义的码制转换
SYNOPSIS CREATE [DEFAULT] CONVERSION name FOR source_encoding TO dest_encoding FROM funcname DESCRIP ...
- CREATE TYPE - 定义一个新的数据类型
SYNOPSIS CREATE TYPE name AS ( attribute_name data_type [, ... ] ) CREATE TYPE name ( INPUT = input_ ...
- CREATE FUNCTION - 定义一个新函数
SYNOPSIS CREATE [ OR REPLACE ] FUNCTION name ( [ argtype [, ...] ] ) RETURNS rettype { LANGUAGE lang ...
- CREATE AGGREGATE - 定义一个新的聚集函数
SYNOPSIS CREATE AGGREGATE name ( BASETYPE = input_data_type, SFUNC = sfunc, STYPE = state_data_type ...
- javascript一种新的对象创建方式-Object.create()
1.Object.create() 是什么? Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不 ...
- CREATE RULE - 定义一个新的重写规则
SYNOPSIS CREATE [ OR REPLACE ] RULE name AS ON event TO table [ WHERE condition ] DO [ INSTEAD ] { N ...
- CREATE SCHEMA - 定义一个新的模式
SYNOPSIS CREATE SCHEMA schemaname [ AUTHORIZATION username ] [ schema_element [ ... ] ] CREATE SCHEM ...
随机推荐
- HDU1087 Super Jumping! Jumping! Jumping! —— DP
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1087 Super Jumping! Jumping! Jumping! Time Limi ...
- 什么叫强类型的DATASET ?对DATASET的操作处理?强类型DataSet的使用简明教程
强类型DataSet,是指需要预先定义对应表的各个字段的属性和取值方式的数据集.对于所有这些属性都需要从DataSet, DataTable, DataRow继承,生成相应的用户自定义类.强类型的一个 ...
- luogu 3960 列队
noip2017 D2T3 列队 某zz选手当时直接放弃了写了50还写错了 题目大意: 有一个n行m列的方阵,第i行j列的点编号为(i-1)m+j 每次把第x行y列的点拿出来,然后把这一行它之后的点都 ...
- str函数isdigit、isdecimal、isnumeric的区别
s为字符串s.isalnum() 所有字符都是数字或者字母s.isalpha() 所有字符都是字母s.isdigit() 所有字符都是数字s.islower() 所有字符都是小写s.isupper() ...
- 【position】
background-position 定位的position的区别 background-position 相对的位置是(容器的宽度-子元素的宽度) 当子元素的宽度大于容器的宽度 backgroun ...
- Python解压缩ZIP格式
转自:http://blog.csdn.net/linux__kernel/article/details/8271326 很多人在Google上不停的找合适自己的压缩,殊不知Py的压缩很不错.可以试 ...
- E20180224-hm-xa
separator n. 分离器,分离装置; 防胀器; colon n. 冒号; <解>结肠; 科郎(哥斯达黎加货币单位); semicolon n. 分号;
- Ruby 数式匹配器
str = "x^2 + 12317 +X^2 - Length" str = " x ^ 2 + y ...
- BIOS 和UEFI的区别
BIOS先要对CPU初始化,然后跳转到BIOS启动处进行POST自检,此过程如有严重错误,则电脑会用不同的报警声音提醒,接下来采用读中断的方式加载各种硬件,完成硬件初始化后进入操作系统启动过程:而UE ...
- redis相关配置
redis相关配置1.yum 源码 rpm yum 快速,间接,高效,解决依赖关系,(自动安装到某个路径,不可控),通过yum安装的软件查询命令 rpm -ql nginx yum源的软件包可能版本非 ...