PostgreSQL 的类型系统划分为五大基本大类:基本类型(Base Types)、容器类型(复合类型与数组)、域类型(Domains)、伪类型(Pseudo-types)以及多态类型(Polymorphic Types)。
基本类型(如 integer、text 等)是在底层由 C 语言函数直接操作其物理内存字节表示的数据类型。创建自定义基本类型时,必须至少提供输入函数(将文本转换为内部格式)与输出函数(将内部格式转换为文本)。
容器类型包括复合类型(行类型)、数组类型与范围类型。每当创建一张数据表时,系统会自动在后台创建一个与该表列结构完全同名的复合行类型。
域类型是在既有底层底层类型之上附加了检查约束(CHECK)的新类型,用于在类型定义层面强制实施数据校验(参见 CREATE DOMAIN)。
伪类型(如 void、record、anyelement、internal)不能作为表中普通字段的存储类型,它们仅用于声明函数的参数签名或返回值类型。
多态类型(如 anyelement、anyarray、anycompatible)允许编写单一定义但能够自适应接受多种不同数据类型参数的通用泛型函数。
Table 36.1. 多态类型列表
| 多态类型名称 | 说明 |
|---|---|
anyelement | 代表任意单一具体数据类型 |
anyarray | 代表元素类型与 anyelement 保持一致的数组类型 |
anynonarray | 代表任意非数组类型 |
anycompatible | 代表一组可以通过通用规则提升转换的兼容数据类型 |