CREATE TYPE

名称

CREATE TYPE — 定义一个新的基本数据类型

语法

CREATE TYPE typename ( INPUT = input_function, OUTPUT = output_function
      , INTERNALLENGTH = { internallength | VARIABLE } [ , EXTERNALLENGTH = { externallength | VARIABLE } ]
    [ , DEFAULT = "default" ]
    [ , ELEMENT = element ] [ , DELIMITER = delimiter ]
    [ , SEND = send_function ] [ , RECEIVE = receive_function ]
    [ , PASSEDBYVALUE ] )

输入

typename
将要创建的类型名.
internallength
一个文本串,说明新类型的内部长度.
externallength
一个文本串,说明新类型的外部长度.
input_function
一个函数的名称,由 CREATE FUNCTION 创建,将数据从外部类型转换成内部类型.
output_function
一个函数的名称,由 CREATE FUNCTION 创建,将数据从内部格式转换成适于显示的形式.
element
被创建的类型是数组;这个声明数组元素的类型.
delimiter
数组的分隔字符.
default
用于显示的表示"数据不存在"的缺省文本.
send_function
CREATE FUNCTION 创建的函数名,它将该类型的数据转换成一个适合传输到其他机器的形式.
receive_function
CREATE FUNCTION 创建的函数名,将该类型从适于传输给其他机器的形式转换为内部形式.

输出

CREATE
如果创建类型成功,返回此信息.

描述

CREATE TYPE 允许用户在 Postgres 当前数据库里创建一个新的用户数据类型.定义该类型的用户成为其所有者. Typename 是新类型的名称而且必须在所定义的数据库中唯一.

CREATE TYPE 需要在定义类型之前先注册两个函数(用创建函数命令).新的基本类型的形式由 input_function 决定,它将该类型的外部形式转换成可以被对该类型操作的操作符和函数识别的形式.自然,output_function 用做相反用途.输入和输出函数都必须定义成接收一个或两个类型为 "opaque" 的参数的函数.

新的基本数据类型可定义成为定长,这时 internallength 是一个正整数,也可以是变长的,这时 Postgres 假定新类型的格式和 Postgres 所支持的"text" 类型是一样的.要指明一个类型是变长,将 internallength 设成 VARIABLE. 类似的,外部形式也用 externallength 关键字声明.

要指明一个类型是数组以及指明一个类型有数组元素.应该使用element关键字.例如,定义一个4-字节整数("int4"),声明如下

ELEMENT = int4
要声明用于这种类型数组的分隔符,可设置 delimiter 声明分隔符.缺省的分隔符是逗号 (",").

一个可选的的缺省值可用于令用户声明某种位模式来代表"数据不存在".用 DEFAULT 关键字声明缺省值.

可选的函数 send_functionreceive_function 用于请求 Postgres 服务的应用程序和 Postgres 数据库不在同一台机器的场合.在这种情况下,Postgres 运行的机器所用的数据类型格式可能和远端机器的不一样.在这种情况下,将服务器到客户端的数据转换成一个标准格式,当服务器收到从客户端来的数据时再转换成机器的格式是合适的.如果没有这样的函数声明,就假设内部数据格式可以被任何相关的硬件体系接受.比如, 如果在一台 Sun-4 和一台 DECstation 之间传递数据,单字节数据就不必转换,但许多其他类型需要(转换).

可选的标签,PASSEDBYVALUE,表明使用该数据类型的操作符或函数应该传递一个参数的值而不是引用(形参).要注意对内部格式超过4-字节的类型你不能传递参数值.

对于新的基本类型,用户可以通过本节描述的一些功能定义操作符,函数和聚集.

数组类型

两个通用内建函数,array_in 和 array_out,用于快速建立变长数组类型.这些函数可对任何现存的 Postgres 数据类型进行操作.

数组类型

两个通用内建函数,array_in 和 array_out,用于快速建立变长数组类型.这些函数可对任何现存的 Postgres 数据类型进行操作. 

大对象类型

一个"正常的" Postgres 类型最多只能有8192字节长.如果你需要更大的类型,你必须创建大对象类型(Large Object type).这些数据类型的接口在 PostgreSQL 程序员手册 里详细讨论.所有大对象类型的长度总是 VARIABLE (变长).

例子

这个命令创建长方形数据类型,并且将这种类型用于一个表定义:
CREATE TYPE box (INTERNALLENGTH = 8,
    INPUT = my_procedure_1, OUTPUT = my_procedure_2);
CREATE TABLE myboxes (id INT4, description box);
这条命令创建一个变长数组类型, 其数组元素的类型是整数.
CREATE TYPE int4array (INPUT = array_in, OUTPUT = array_out,
    INTERNALLENGTH = VARIABLE, ELEMENT = int4);
CREATE TABLE myarrays (id int4, numbers int4array);
这条命令创建一个大对象类型并用其创建了一个表:
CREATE TYPE bigobj (INPUT = lo_filein, OUTPUT = lo_fileout,
    INTERNALLENGTH = VARIABLE);
CREATE TABLE big_objs (id int4, obj bigobj);

注意

类型名不能以下划线("_")开头而且只能有31个字符长.这是因为 Postgres 偷偷地为每种基本类型创建了一个数组类型,而且该数组类型的名字是基本类型名前面加一个下划线.

请参考 DROP TYPE 获取删除一个类型的信息.

请参阅 PostgreSQL 程序员手册CREATE FUNCTION, CREATE OPERATOR 和大对象的章节获取更多信息.

兼容性

SQL3

CREATE TYPE 是 SQL3 语句.