布尔类型
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 '') XMLPARSE (CONTENT 'xyz PostgreSQL Tutorial ... bar foo ')
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 | 指示函数不返回值。 |