支持的版本:当前 (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

51.64。 pg_type #

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

表 51.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 最好为 false。可变长度的类型始终通过引用传递。请注意,即使长度允许按值传递,typbyval 也可以为 false。

typtype char

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

typcategory char

typcategory 是数据类型的任意分类,解析器使用它来确定应该 首选 哪些隐式转换。请参阅 表 51.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 为零,则此值应为零。但是,如果处理程序不需要 typelem 来确定下标结果类型,则当 typsubscript 不为零时,它可以为零。请注意,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 对于 varlena 类型(typlen = -1 的类型)指示该类型是否准备好进行 TOAST 处理,以及此类型的属性的默认策略应该是什么。可能的值为:

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

  • 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

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

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 中定义的大小和对齐方式必须与编译器在表示表行的结构中布局列的方式一致,这一点至关重要。

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

表 51.65. typcategory 代码

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

提交更正

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