↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本PostgreSQL 6.4 已于 2003 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

CREATE TYPE

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

大纲

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

输入

typename

要创建的类型的名称。

INTERNALLENGTH internallength

一个字面值,指定新类型的内部长度。

EXTERNALLENGTH externallength

一个字面值,指定新类型的外部长度。

INPUT input_function

一个由 CREATE FUNCTION 创建的函数的名称,它把数据从外部形式转换为该类型的内部形式。

OUTPUT output_function

一个由 CREATE FUNCTION 创建的函数的名称,它把数据从内部形式转换为适合显示的形式。

element

正在创建的类型是数组;该参数指定数组元素类型。

delimiter

数组的分隔符字符。

default

为表示"数据不存在"而显示的默认文本。

send_function

一个由 CREATE FUNCTION 创建的函数的名称,它把该类型的数据转换为适合传输到另一台机器的形式。

receive_function

一个由 CREATE FUNCTION 创建的函数的名称,它把该类型的数据从适合从另一台机器传输的形式转换为内部形式。

输出

→ CREATE

类型创建成功时返回的消息。

描述

CREATE TYPE 允许用户向 Postgres 注册一种新的用户数据类型,供当前数据库使用。定义类型的用户将成为其所有者。 Typename 是新类型的名称,在该数据库已定义的类型中必须唯一。

CREATE TYPE 要求在定义类型之前(用 create function)先注册两个函数。新基本类型的表示由 input_function 决定,它把该类型的外部表示转换为为该类型定义的操作符和函数可用的内部表示。自然, output_function 执行反向的转换。输入和输出函数都必须声明为接受一个或两个 "opaque" 类型的参数。

新的基本数据类型可以是定长的,这时 internallength 是一个正整数;也可以是变长的,这时 Postgres 假定新类型与 Postgres 内置的数据类型 "text" 具有相同的格式。要指明一个类型是变长的,把 internallength 设为 VARIABLE。外部表示用 externallength 关键字以类似的方式指定。

要指明一个类型是数组并指明它有数组元素,可以用 element 关键字指定数组元素的类型。例如,要定义一个 4 字节整数("int4")的数组,指定

ELEMENT = int4

要指明该类型数组上使用的分隔符,可以把 delimiter 设为某个特定的字符。默认分隔符是逗号(",")。

如果用户希望某个特定的位模式表示"数据不存在",可以选择性地提供一个默认值。用 DEFAULT 关键字指定默认值。

可选函数 send_function 和 receive_function 用于请求 Postgres 服务的应用程序位于另一台机器上的情形。在这种情况下, Postgres 所在机器为该数据类型使用的格式可能与远程机器使用的格式不同。此时,服务器向客户端发送数据时把数据项转换为标准形式,而在服务器从客户端接收数据时从标准格式转换为机器特定的格式,是恰当的做法。如果不指定这两个函数,就假定该类型的内部格式在所有相关机器体系结构上都是可接受的。例如,单个字符从 Sun-4 传到 DECstation 不需要转换,但许多其他类型需要。

可选标志 PASSEDBYVALUE 表示使用该数据类型的操作符和函数应按值而不是按引用传递参数。注意,内部表示超过 4 字节的类型不能按值传递。

对于新的基本类型,用户可以使用本节描述的相应设施定义操作符、函数和聚合。

数组类型

存在两个广义的内置函数 array_in 和 array_out,用于快速创建变长数组类型。这些函数可用于任何现有 Postgres 类型的数组。

大对象类型

"常规"的 Postgres 类型长度只能达到 8192 字节。如果你需要更大的类型,就必须创建大对象类型。这些类型的接口在 第 7 节"大对象接口"中有详细讨论。所有大对象类型的长度永远是 VARIABLE。

示例

这条命令创建 box 数据类型,然后在类定义中使用该类型:

       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)
  

限制

类型名不能以下划线字符("_")开头,且长度只能是 15 个字符。这是因为 Postgres 会为每个基本类型悄悄创建一个数组类型,其名称由基本类型名前加下划线组成。

注意

参见 DROP TYPE 以删除现有类型。

另请参阅 CREATE FUNCTION、 CREATE OPERATOR 以及 PostgreSQL 程序员指南中关于大对象的章节。

兼容性

SQL3

CREATE TYPE 是一个 SQL3 语句。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。