2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 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

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表示以null结尾的C字符串。

typbyval bool

typbyval决定内部例程是按值传递还是按引用传递此类型的。如果typlen不是1、2或4(或在Datum为8字节的机器上为8),则typbyval最好为false。可变长度类型始终按引用传递。请注意,即使长度允许按值传递,typbyval也可以为false。

typtype char

typtype对于基本类型为b,对于复合类型(例如表行类型)为c,对于域为d,对于枚举类型为e,对于伪类型为p,对于范围类型为r,或者对于多范围类型为m。另请参阅typrelidtypbasetype

typcategory char

typcategory是数据类型的一个任意分类,解析器使用它来确定哪些隐式转换应该是首选。请参阅表 52.65

typispreferred bool

如果该类型在其typcategory中是首选的转换目标,则为True

typisdefined bool

如果类型已定义,则为True,如果这是尚未定义的类型的占位符条目,则为False。当typisdefined为False时,除了类型名称、命名空间和OID之外,其他任何内容都不可信。

typdelim char

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

typrelid oid (引用 pg_class.oid

如果这是一个复合类型(请参阅typtype),则此列指向定义相应表的pg_class条目。(对于独立的复合类型,pg_class条目并不真正代表表,但对于类型的pg_attribute条目需要它来链接。)对于非复合类型,为零。

typsubscript regproc (引用 pg_proc.oid

下标处理函数 OID,如果此类型不支持下标,则为零。类型为true数组类型时,typsubscript = array_subscript_handler,但其他类型可能有其他处理函数来实现专门的下标行为。

typelem oid (引用 pg_type.oid

如果typelem不为零,则它标识pg_type中的另一个行,该行定义了下标产生的类型。如果typsubscript为零,则此项应为零。但是,如果typsubscript不为零,但typelem可以为零,如果处理程序不需要typelem来确定下标结果类型。请注意,typelem依赖性被认为是暗示该类型物理包含元素类型;因此,元素类型的DDL更改可能会受到此类型存在的限制。

typarray oid (引用 pg_type.oid

如果typarray不为零,则它标识pg_type中的另一个行,该行是具有此类型作为元素的true数组类型

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

typstorage告知可变长度类型(typlen = -1 的类型)是否已准备好进行TOAST处理,以及此类型的属性的默认策略应是什么。可能的值为

  • p (plain):值必须始终存储为普通(非可变长度类型始终使用此值)。

  • e (external):值可以存储在次要TOAST关系中(如果关系有,请参阅pg_class.reltoastrelid)。

  • m (main):值可以压缩并内联存储。

  • x (extended):值可以压缩和/或移至次要关系。

x是可TOAST类型常用的选择。请注意,m值也可以移出到次要存储,但仅作为最后手段(ex值首先被移动)。

typnotnull bool

typnotnull表示类型的非空约束。仅用于域。

typbasetype oid (引用 pg_type.oid

如果这是一个域(请参阅typtype),则typbasetype标识它基于的类型。如果此类型不是域,则为零。

typtypmod int4

域使用typtypmod来记录要应用于其基本类型的typmod(如果基本类型不使用typmod,则为-1)。如果此类型不是域,则为-1。

typndims int4

如果域是数组之上(即typbasetype是数组类型),则typndims是数组的维度数。对于非数组域类型的类型,则为零。

typcollation oid (引用 pg_collation.oid

typcollation指定类型的排序规则。如果类型不支持排序规则,则此值将为零。支持排序规则的基本类型在此处具有非零值,通常为DEFAULT_COLLATION_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.8 节


注意

对于在系统表中使用的固定宽度类型,pg_type中定义的宽度和对齐方式必须与编译器在表示表行的结构中布局列的方式一致,这一点至关重要。

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

表 52.65. typcategory 代码

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

提交更正

如果您在文档中发现任何不正确、与您对特定功能的经验不符或需要进一步说明的内容,请使用此表格报告文档问题。