2024年9月26日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本: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 表示以 null 结尾的 C 字符串。

typbyval bool

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

typtype char

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

typcategory char

typcategory 是数据类型的任意分类,解析器使用它来确定哪些隐式转换应该是 首选。参见 表 51.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

typstorage 告诉 varlena 类型(那些 typlen = -1 的类型)如果类型已准备就绪进行烤面包以及此类型的属性的默认策略应该是什么。可能的值为

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

  • e(外部):值可以存储在辅助 TOAST 关系中(如果关系有一个,请参见 pg_class.reltoastrelid)。

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

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

x 是可烤面包类型的常用选择。请注意,m 值也可以移动到辅助存储,但仅作为最后的手段(ex 值首先移动)。

typnotnull bool

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

typbasetype oid(引用 pg_typeoid

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

typtypmod int4

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

typndims int4

typndims 是数组域(即 typbasetype 是数组类型)的数组维数。对于除数组域之外的其他类型,该值为零。

typcollation oid(引用 pg_collationoid

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

提交更正

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