PostgreSQL:其它类型

布尔类型

PostgreSQL 提供了标准的 SQL 类型布尔值。布尔类型可以有几种状态:true、false 和第三状态 null,这是 SQL 空值表示。

名称 存储长度 描述
boolean 1 byte 状态为 true 或 false

枚举类型

枚举(枚举)类型的数据类型,包括静态,有序设置的值。在许多编程语言支持枚举类型,它们是相等。

CREATE TYPE week AS ENUM ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');

枚举一旦产生,它们可以像任何其他类型。

几何类型

几何数据类型表示二维空间对象。最根本的不同点是形成的所有其他类型的基础。

名称 存储长度 表示 描述
point 16 bytes 平面上的点 (x,y)
line 32 bytes 无限的线(未完全实现) ((x1,y1),(x2,y2))
lseg 32 bytes 有限的线段 ((x1,y1),(x2,y2))
box 32 bytes 矩形框 ((x1,y1),(x2,y2))
path 16+16n bytes 封闭路径(类似于多边形) ((x1,y1),...)
path 16+16n bytes 打开路径 [(x1,y1),...]
polygon 40+16n 多边形(类似于封闭路径) ((x1,y1),...)
circle 24 bytes <(x,y),r> (中心点和半径)

位串类型

位串类型用于存储位掩码。他们要么是 0 或 1。 SQL 位类型有两种:(n)的位而变位(n)的,其中 n 是一个正整数。

文本搜索类型

这个类型支持全文检索,这是通过自然语言文档的集合的搜索,找到那些最符合查询活动。这有两种数据类型:

名称 描述
tsvector 这是一个由不同的单词组成的排序列表,这些单词被规范化,以合并同一个单词的不同变体,称为“词汇”。
tsquery 它存储要搜索的语义,并按照布尔运算符& (and)、| (OR)和!(非)。括号可用于强制操作符的分组。

UUID 类型

一个 UUID(通用唯一标识符)写成小写的十六进制数字序列,由连字号,特别是一组 8 位数字,然后由三组4位数字,然后由一组 12 位数字分开几组,总 32 位,128 位代表。

一个UUID的例子是: 550e8400-e29b-41d4-a716-446655440000

XML 类型

XML 数据类型可以用来存储 XML 数据。对于存储 XML 数据,首先创建 XML 值函数 XMLPARSE 如下:

XMLPARSE (DOCUMENT '  PostgreSQL Tutorial  ... ') XMLPARSE (CONTENT 'xyzbarfoo')

JSON类型

JSON 数据类型可以用来存储 JSON( JavaScript 对象符号)数据。这样的数据也可以被存储为文本,但 JSON 数据类型具有的优点是检查每个存储的值是否为有效的 JSON 值。也有相关的支持功能可以直接用来处理 JSON 数据类型,如下所示:

示例 结果
array_to_json('{{1,5},{99,100}}'::int[]) [[1,5],[99,100]]
row_to_json(row(1,'foo')) {"f1":1,"f2":"foo"}

复合类型

此类型代表一个字段名和数据类型,即结构的一个表中的行或记录列表。

复合类型声明

下面的例子演示如何声明一个复合类型:

CREATE TYPE inventory_item AS ( name text, supplier_id integer, price numeric );

此数据类型可用于在创建表如下所示:

CREATE TABLE on_hand (item inventory_item, count integer );

复合值输入

复合值可以插入文字常量,封装领域括号内的值,并用逗号将它们隔开。一个例子是如下:

INSERT INTO on_hand VALUES (ROW('fuzzy dice', 42, 1.99), 1000); yiibai.com

此有效的定义同上的 inventory_item 的。行关键字实际上是可选的表达式中,只要有一个以上的字段。

访问复合类型

要访问一个复合列的字段,字段名,使用点很像选择字段从一个表名。例如,要选择一些子字段,on_hand 示例表的查询将如下所示:

SELECT (item).name FROM on_hand WHERE (item).price > 9.99;

甚至可以使用表名(例如,在一个多表查询),像这样:

SELECT (on_hand.item).name FROM on_hand WHERE (on_hand.item).price > 9.99;

范围类型

范围类型的数据类型,采用了一系列数据。范围类型可以是离散的范围(例如,所有的整数值 1 到 10)或连续范围(例如任何时间点的上午 10:00 到上午 11:00)。

内置的范围类型范围包括:

  • int4range:整数范围

  • int8range:长整型数字范围

  • numrange:数值范围

  • tsrange:没有时区的时间戳范围

  • tstzrange:带有时区的时间戳范围

  • daterange:日期范围

可以创建自定义的范围类型,做出新的类型的适用范围,如使用int类型为基础的IP地址范围,或者使用浮点数据类型为基础的浮动范围。

范围类型支持包容性和排他性的范围边界分别使用 [] 和 () 个字符,例如: [4,9) 代表所有从包括 4 但不包括 9 的整数。

对象标识符类型

对象标识符(OID)内部使用 PostgreSQL 作为各种系统表的主键。 OIDS IfWITH 指定或 default_with_oids 配置变量,只有在这样的情况下启用的 OID 被添加到用户创建的表。下表列出了几个别名类型。 OID 别名类型有没有自己的操作,除了专门的输入和输出过程。

名称 参考 描述 结果
oid any 数字对象标识符 564182
regproc pg_proc 函数名 sum
regprocedure pg_proc 带参数类型的函数 sum(int4)
regoper pg_operator 操作符名称  +
regoperator pg_operator 带参数类型的运算符 *(integer,integer) 或 -(NONE,integer)
regclass pg_class 关系名称 pg_type
regtype pg_type 数据类型名 integer
regconfig pg_ts_config 文本搜索配置 english
regdictionary pg_ts_dict 文本搜索字典 simple

伪类型

PostgreSQL类型系统包含了一些特殊用途的统称为伪类型的项。一个伪类型不能被用作列的数据类型,但它可以用来声明一个函数的参数或结果类型。下表列出了现有的伪类型。

名称 描述
any 指示函数接受任何输入数据类型。
anyelement 指示函数接受任何数据类型。
anyarray 指示函数接受任何数组数据类型。
anynonarray 指示函数接受任何非数组数据类型。
anyenum 指示函数接受任意枚举数据类型。
anyrange 指示函数接受任何范围数据类型。
cstring 指示一个函数接受或返回一个以 null 结尾的 C 字符串。
internal 指示函数接受或返回服务器内部数据类型。
language_handler 程序语言调用处理程序被声明为返回 language_handler。
fdw_handler 外数据包装处理程序被声明为返回 fdw_handler。
record 标识返回未指定行类型的函数。
trigger 触发器函数被声明为返回触发器。
void 指示函数不返回值。
请使用浏览器的分享功能分享到微信等