Skip to content

53.64.pg_type#

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

表 53.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 是数据类型的任意分类,由解析器用于确定哪些隐式转换应 优先。请参见 表 53.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 依赖关系被认为暗示此类型中元素类型的物理包含;因此,元素类型的 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 的类型)来说,表示该类型是否已准备就绪以进行吐司处理,以及此类型的属性的默认策略应该是什么。可能的值是

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

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

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

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

x 是可吐司类型的通常选择。请注意,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,则可排序类型的域可以具有不同于其基本类型的排序规则 OID。

typdefaultbin pg_node_tree

如果 typdefaultbin 不为 null,则它是类型的默认表达式的 nodeToString() 表示形式。这仅用于域。

typdefault text

如果类型没有关联的默认值,则 typdefault 为 null。如果 typdefaultbin 不为 null,则 typdefault 必须包含 typdefaultbin 表示的默认表达式的可读版本。如果 typdefaultbin 为 null 而 typdefault 不为 null,则 typdefault 是类型的默认值的外部表示形式,可以将其馈送到类型的输入转换器以生成常量。

typacl aclitem[]

访问权限;有关详细信息,请参见 第 5.7 节

注意

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

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

表 53.65.typcategory代码

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