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 - 定义一种新的过程语言的更多相关文章

  1. python定义一种新类型的元组

    # 定义一种新类型的元组,只保留int类型,切只大于0的元素 # 例如:IntTuple([1,-1,"abc",6,['x','y'],3])==>(1,6,3) # 解决 ...

  2. createlang - 定义一种新的 PostgreSQL 过程语言

    SYNOPSIS createlang [ connection-option...] langname [ dbname] createlang [ connection-option...] -- ...

  3. CREATE CONVERSION - 定义一个用户定义的码制转换

    SYNOPSIS CREATE [DEFAULT] CONVERSION name FOR source_encoding TO dest_encoding FROM funcname DESCRIP ...

  4. CREATE TYPE - 定义一个新的数据类型

    SYNOPSIS CREATE TYPE name AS ( attribute_name data_type [, ... ] ) CREATE TYPE name ( INPUT = input_ ...

  5. CREATE FUNCTION - 定义一个新函数

    SYNOPSIS CREATE [ OR REPLACE ] FUNCTION name ( [ argtype [, ...] ] ) RETURNS rettype { LANGUAGE lang ...

  6. CREATE AGGREGATE - 定义一个新的聚集函数

    SYNOPSIS CREATE AGGREGATE name ( BASETYPE = input_data_type, SFUNC = sfunc, STYPE = state_data_type ...

  7. javascript一种新的对象创建方式-Object.create()

    1.Object.create() 是什么? Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不 ...

  8. CREATE RULE - 定义一个新的重写规则

    SYNOPSIS CREATE [ OR REPLACE ] RULE name AS ON event TO table [ WHERE condition ] DO [ INSTEAD ] { N ...

  9. CREATE SCHEMA - 定义一个新的模式

    SYNOPSIS CREATE SCHEMA schemaname [ AUTHORIZATION username ] [ schema_element [ ... ] ] CREATE SCHEM ...

随机推荐

  1. Lightoj 1011 - Marriage Ceremonies

    You work in a company which organizes marriages. Marriages are not that easy to be made, so, the job ...

  2. 双系统xp和ubuntu,删除ubuntu

    1:下载MbrFix.exe 2:进入c盘,命令MbrFix /drive 0 fixmbr

  3. YTU 2875: 倒霉蛋买饭去

    2875: 倒霉蛋买饭去 时间限制: 1 Sec  内存限制: 128 MB 提交: 22  解决: 17 题目描述 早春星期天的某个早晨,大风呼呼地刮.一个宿舍n个人,谁也不想起床买饭去.他们定了一 ...

  4. 网页音乐播放器javascript实现,可以显示歌词

    可以显示歌词,但是歌词和歌曲都要实现自己下载下来.只能播放一首歌,歌词还得是lrc格式的代码写的很罗嗦,急切希望帮改改CSS的代码​1.代码:<html >    <head> ...

  5. 创建cell的三种方式

    方式一 注册cell -> 无需为cell绑定标识符 [使用UIViewController完成!] l  1> static NSString * const ID = @"c ...

  6. apple IOS的base64编解码

    <pre style="word-wrap: break-word; white-space: pre-wrap;">/* * Copyright (c) 2003 A ...

  7. HDU4704:Sum(欧拉降幂公式)

    Input 2 Output 2 Sample Input 2 由公式,ans=2^(N-1)%Mod=2^((N-1)%(Mod-1)+(Mod-1)) %Mod. 注意:降幂的之后再加一个Mod- ...

  8. 【USACO 2011】 道路和航线

    [题目链接] 点击打开链接 [算法] SPFA + SLF / LLL 优化 [代码] #include<bits/stdc++.h> using namespace std; #defi ...

  9. Linux共享内存(二)

    Linux共享内存编程实例 原文链接:http://blog.csdn.net/pcliuguangtao/article/details/6526119 /*共享内存允许两个或多个进程进程共享同一块 ...

  10. 希尔排序(Shellsort)

    首先,Shell是发明这个算法的人名,不是这个算法的思想或者特点. 希尔排序,也称为增量递减排序.基本思路,是把原来的序列,等效视为一个矩阵的形式.矩阵的列数,也称为宽度或者增量,记为w. 假设数组A ...