跳到主要内容
版本:2.x

pg_type

pg_type 系统目录表用于存储数据类型的信息。基础类型(标量类型)通过 CREATE TYPE 创建,域类型通过 CREATE DOMAIN 创建。每个表在数据库中都会自动生成一个复合类型,用于表示表的行结构。也可以使用 CREATE TYPE AS 明确创建复合类型。

列名类型引用说明
oidoid行标识符(隐藏属性,需显式选择)。
typnamename数据类型名称。
typnamespaceoidpg_namespace.oid包含该类型的命名空间的 OID。
typowneroidpg_authid.oid该类型的所有者。
typlensmallint如果为固定长度类型,表示其内部表示所占的字节数。可变长度类型为负值:
-1 表示 varlena 类型(有长度前缀),
-2 表示以 NULL 结尾的 C 字符串。
typbyvalboolean表示内部调用时该类型的值是按值传递还是按引用传递。如果 typlen 不是 1、2、4(或在某些平台上为 8),typbyval 应为 false。可变长度类型始终按引用传递。
typtypechar类型类别:
b = 基础类型,
c = 复合类型,
d = 域,
e = 枚举类型,
p = 伪类型,
r = 范围类型。详见 typrelidtypbasetype
typcategorychar类型分类,用于解析器确定优先使用哪种隐式类型转换。
typispreferredboolean如果该类型在其类别中是优选的隐式转换目标,则为 true。
typisdefinedboolean如果该类型已定义则为 true,否则为占位符条目(例如引用了尚未定义的类型)。未定义类型只能信任其名称、命名空间和 OID。
typdelimchar当解析数组输入时,用于分隔值的字符。该分隔符与数组元素类型相关,而非数组类型。
typrelidoidpg_class.oid若为复合类型,则指向定义该类型结构的表的 pg_class 条目;独立复合类型也需要这个表项,以供其 pg_attribute 关联。非复合类型该值为 0。
typsubscriptregprocpg_proc.oid该类型的下标访问函数 OID;不支持下标访问则为 0。
typelemoidpg_type.oid如不为 0,则表示该类型的元素类型(支持数组下标访问)。例如 namepoint 是固定长度但具有 typelem 的类型。
typarrayoidpg_type.oid如不为 0,则指向该类型的数组类型的 OID。用于查找某个类型的数组类型。
typinputregprocpg_proc.oid文本格式的输入转换函数。
typoutputregprocpg_proc.oid文本格式的输出转换函数。
typreceiveregprocpg_proc.oid二进制格式的输入转换函数;若无则为 0。
typsendregprocpg_proc.oid二进制格式的输出转换函数;若无则为 0。
typmodinregprocpg_proc.oid类型修饰符输入函数;若不支持则为 0。
typmodoutregprocpg_proc.oid类型修饰符输出函数;若使用默认格式则为 0。
typanalyzeregprocpg_proc.oid自定义 ANALYZE 函数;若使用默认函数则为 0。
typalignchar存储该类型值时所需的对齐方式,适用于磁盘和内存表示。多个值连续存储时,会插入填充字节使其按指定边界对齐。
可能值:
c = 字节对齐(无对齐需求)
s = 2 字节对齐
i = 4 字节对齐
d = 8 字节对齐
typstoragechartyplen = -1 的 varlena 类型,表示是否支持 TOAST 及其默认存储策略:
p = 始终明文存储
e = 可存储至 TOAST 辅助表中
m = 支持压缩后内联存储
x = 支持压缩或 TOAST 存储。
typnotnullboolean表示类型上的非空约束,仅适用于域类型。
typbasetypeoidpg_type.oid该域所基于的基础类型;如果不是域类型则为 0。
typtypmodinteger域所使用的 typmod;若基础类型不使用修饰符,则为 -1。非域类型此字段为 -1。
typndimsinteger对于基于数组的域,表示数组维度数。其他类型为 0。
typcollationoidpg_collation.oid类型的排序规则 OID;若不支持排序规则则为 0。支持排序的基础类型通常为 DEFAULT_COLLATION_OID
typdefaultbinpg_node_tree若不为 null,表示该类型的默认表达式的 nodeToString() 形式,仅用于域类型。
typdefaulttext若无默认值则为 null。若 typdefaultbin 存在,则本字段为其可读形式;否则本字段为默认值的外部表示,可作为输入传递给类型的转换函数。
typaclARRAY访问权限,详见 GRANTREVOKE

下表列出了系统定义的 typcategory 分类码。未来的系统类别也将使用大写 ASCII 字母,其他字符保留给用户自定义类别。

代码类别说明
A数组类型
B布尔类型
C复合类型
D日期/时间类型
E枚举类型
G几何类型
I网络地址类型
N数值类型
P伪类型
R范围类型
S字符串类型
T时间间隔类型
U用户定义类型
V位串类型
Xunknown 类型