↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 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
开发快照。 PostgreSQL 20devel 尚未正式发布,内容仍可能变化。

52.64. pg_type #

目录 pg_type 存储有关数据类型的信息。基础类型和枚举类型(标量类型)使用 CREATE TYPE 创建,而域使用 CREATE DOMAIN 创建。数据库中的每一个表都会有一个自动创建的复合类型,用于表示表的行结构。也可以使用 CREATE TYPE AS 创建复合类型。

表 52.64. pg_type 列

列类型

描述

oid oid

行标识符

typname name

数据类型的名字

typnamespace oid(引用 pg_namespace.oid)

包含此类型的名字空间的 OID

typowner oid(引用 pg_authid.oid)

类型的拥有者

typlen int2

对于一个固定尺寸的类型,typlen 是该类型内部表示的字节数。对于一个变长类型,typlen 为负值。-1 表示一个“varlena”类型(具有长度字),-2 表示一个以空字符结尾的 C 字符串。

typbyval bool

typbyval 判断内部例程传递这个类型的值时是通过传值还是传引用。如果 typlen 不是 1、2 或 4(或者在 Datum 为 8 字节的机器上为 8),则 typbyval 最好是假。变长类型总是传引用。注意即使长度允许传值,typbyval 也可以为假。

typtype char

typtype 可以是:b 表示一个基础类型,c 表示一个复合类型(例如一个表的行类型),d 表示一个域,e 表示一个枚举类型,p 表示一个伪类型,r 表示一个范围类型,或 m 表示一个多范围类型。另请参阅 typrelid 和 typbasetype。

typcategory char

typcategory 是一种任意的数据类型分类,它被解析器用来决定应“首选”哪些隐式类型转换。参见表 52.65。

typispreferred bool

如果此类型在它的 typcategory 中是首选的类型转换目标,此列为真

typisdefined bool

如果此类型已被定义则为真,如果此类型只是一个表示还未定义类型的占位符则为假。当 typisdefined 为假,除了类型名字、名字空间和 OID 之外什么都不能被依赖。

typdelim char

在分析数组输入时,分隔两个此类型值的字符。注意该分隔符是与数组元素数据类型相关联的,而不是和数组的数据类型关联。

typrelid oid(引用 pg_class.oid)

如果这是一个复合类型(见 typtype),那么此列指向 pg_class 中定义对应表的项(对于独立定义的复合类型,pg_class 项并不表示一个表,但不管怎样该类型的 pg_attribute 项需要链接到它)。对非复合类型此列为零。

typsubscript regproc(引用 pg_proc.oid)

下标处理函数的 OID,如果该类型不支持下标则为零。“真正的”数组类型的 typsubscript = array_subscript_handler,但其他类型也可能使用不同的处理函数来实现特定的下标行为。

typelem oid(引用 pg_type.oid)

如果 typelem 不为零,则它标识 pg_type 中的另一行,该行定义了下标操作产生的类型。如果 typsubscript 为零则该项为零。但是,当 typsubscript 不为零时它也可以为零,如果处理函数不需要 typelem 来决定下标结果类型。注意 typelem 依赖被视为意味着该类型在物理上包含其元素类型;所以这个元素类型上的 DDL 变更可能会受到该类型存在的限制。

typarray oid(引用 pg_type.oid)

如果 typarray 不是零,则它标识 pg_type 中的另一行,这一行是一个将此类型作为元素的“真正的”数组类型

typinput regproc(引用 pg_proc.oid)

输入转换函数(文本格式)

typoutput regproc(引用 pg_proc.oid)

输出转换函数(文本格式)

typreceive regproc(引用 pg_proc.oid)

输入转换函数(二进制格式),如果没有则为零

typsend regproc(引用 pg_proc.oid)

输出转换函数(二进制格式),如果没有则为零

typmodin regproc(引用 pg_proc.oid)

类型修饰符输入函数,如果类型不支持修饰符则为零

typmodout regproc(引用 pg_proc.oid)

类型修饰符输出函数,或为零以使用标准格式

typanalyze regproc(引用 pg_proc.oid)

自定义 ANALYZE 函数,零表示使用标准函数

typalign char

typalign 表示存储此类型值时所要求的对齐方式。它适用于磁盘存储,以及该值在 PostgreSQL 内部的大多数表示形式。当多个值连续存放时,例如在磁盘上完整行的表示中,这种类型的数据前会插入填充,使其从指定边界开始。对齐参考点是该序列中第一个数据的起始位置。可能的值为:

  • c = char 对齐,即不需要对齐。

  • s = short 对齐(在大部分机器上为 2 字节)。

  • i = int 对齐(在大部分机器上为 4 字节)。

  • d = double 对齐(在很多机器上为 8 字节,但并非所有机器都如此)。

typstorage char

对于变长类型(typlen = -1),typstorage 同时指示该类型是否支持 TOAST,以及其属性应采用的默认策略。可能的值是:

  • p(普通):值必须始终以普通方式存储(非 varlena 类型总是使用这个值)。

  • e(外部):值可以存储在一个二级“TOAST”关系中(如果原关系有这样的关系,参见 pg_class.reltoastrelid)。

  • m(主要):值可以压缩后存储在行内。

  • x(扩展):值可以被压缩和/或移动到二级关系。

x 是支持 TOAST 的类型的常见选择。注意,m 值也可以移到二级存储,但只能作为最后手段(e 和 x 值会先被移动)。

typnotnull bool

typnotnull 表示类型上的一个非空约束。只用于域。

typbasetype oid(引用 pg_type.oid)

如果这是一个域(见 typtype),则 typbasetype 标识该域所基于的类型。如果此类型不是域,则为 0。

typtypmod int4

域使用 typtypmod 来记录被应用于它们基础类型的 typmod(如果基础类型不使用 typmod,则为-1)。如果此类型不是一个域则为-1。

typndims int4

对于基于数组的域,typndims 是数组维度数(即,typbasetype 是一个数组类型)。对于不是基于数组的域的类型,此列为零。

typcollation oid(引用 pg_collation.oid)

typcollation 指定此类型的排序规则。如果类型不支持排序规则,此列为零。支持排序规则的基础类型在这里会有一个非零值,典型值为 DEFAULT_COLLATION_OID。基于支持排序规则的类型的域,如果为其指定了排序规则 OID,则它的排序规则 OID 可以不同于其基础类型的排序规则 OID。

typdefaultbin pg_node_tree

如果 typdefaultbin 非 NULL,那么它就是该类型默认表达式的 nodeToString() 表示形式。此列只用于域。

typdefault text

如果某类型没有相关默认值,那么 typdefault 为 NULL。如果 typdefaultbin 不为 NULL,那么 typdefault 必须包含由 typdefaultbin 表示的默认表达式的人类可读版本。如果 typdefaultbin 为 NULL 而 typdefault 不为 NULL,则 typdefault 是该类型默认值的外部表示形式,它可以被交给该类型的输入转换器来产生一个常量。

typacl aclitem[]

访问权限,另请参阅第 5.9 节


注意

对于系统表中使用的固定宽度类型,关键的是在 pg_type 中定义的大小和对齐与编译器在表示表行的结构体中布局列的方式一致。

表 52.65 列出了 typcategory 的系统定义值。任何未来对此列表的增加都将是大写 ASCII 字母。所有其他 ASCII 字符都保留给用户定义的类别。

表 52.65. typcategory 代码

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

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.