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 ...
随机推荐
- YTU 2945: 编程:五元向量的运算
2945: 编程:五元向量的运算 时间限制: 1 Sec 内存限制: 128 MB 提交: 151 解决: 85 题目描述 用习惯了的运算符操作新定义的类对象,这是OO方法给我们带来的便利.下面要 ...
- memcached value最大限制只能是1M吗
关于memcached的value最大是1M的限制很多人都知道,但是如果你以为我还要说这个事情,那你就错了. 之前的老版本确实是只能是1M,但是根据git记录,其实2009年以后的版本这个value最 ...
- 2 socket相关概念
嘿嘿 这只是学习过程中的笔记积累,百度也是一代吧,大神就勿喷勒..... 1 为什么把网络编程接口叫做套接字 socket字面意思为插座 插孔,让人联想到电话,这种简单的设备给人类太大的方便 2 根据 ...
- ExtJS 4 MVC Viewport和card布局
http://ext4all.com/post/a-little-bit-strange-navigation 效果图: app/view/Viewport.js Ext.define('App.v ...
- HDU 3944 DP? (Lucas定理)
题意:在杨辉三角中让你从最上面到 第 n 行,第 m 列所经过的元素之和最小,只能斜向下或者直向下走. 析:很容易知道,如果 m 在n的左半部分,那么就先从 (n, m)向左,再直着向上,如果是在右半 ...
- 小程序各种授权封装、saveImageToPhotosAlbum、chooseAddress、getUserInfo、getLocation,保存图片、获取用户信息、获取位置信息、收货地址等
代码略多,请异步 github __点击链接
- APP支付宝登录第三方授权如何签约入口在哪里
最近,公司项目要接入支付宝授权登录,第三方SDK接入过不少,一顿按照流程操作.到签约的步骤的时候就把我难住了,入口一直找不到.然后在文档中心搜索“支付宝登录签约”,找到一个申请地址.心想终于找到你了, ...
- 第五篇(那些JAVA程序BUG中的常见单词)
The left-hand side of an assignment must be a variable 赋值的左侧必须是变量 left-hand side 左边 assignment 赋值
- Luogu P1083 借教室【二分答案/差分】By cellur925
题目描述 Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海 ...
- Six degrees of Kevin Bacon
转自:https://blog.csdn.net/a17865569022/article/details/78766867 Input* Line 1: Two space-separated in ...