PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

52.64. pg_type #

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

Table 52.64. \1 字段列说明

Column Type

Description

oid oid

Row identifier

typname name

Data type name

typnamespace oid (references pg_namespace.oid)

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

typowner oid (references 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 是数据类型的一种任意分类, 解析器用它来确定哪些隐式转换应当被视为 “首选”的。 见 Table 52.65。

typispreferred bool

如果该类型在其 typcategory 内是优先的转换目标则为真

typisdefined bool

如果该类型已定义则为真;如果这是一个尚未定义类型的占位条目 则为假。当 typisdefined 为假时, 除类型名、命名空间和 OID 之外的任何内容都不可靠。

typdelim char

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

typrelid oid (references pg_class.oid)

如果这是一个复合类型(见 typtype),则此列指向定义相应表的 pg_class 条目。(对于独立的复合类型, pg_class 条目并不真正表示一张表,但为了让该类型的 pg_attribute 条目有所链接,仍然需要它。) 对于非复合类型则为零。

typsubscript regproc (references pg_proc.oid)

下标处理函数的 OID;如果该类型不支持下标则为零。 “真正的”数组类型的 typsubscript 为 array_subscript_handler, 但其他类型可以拥有其他处理函数来实现专门的下标行为。

typelem oid (references pg_type.oid)

如果 typelem 不为零, 则它标识 pg_type 中的另一行, 定义下标操作产生的类型。 如果 typsubscript 为零, 它应当为零。不过,当 typsubscript 不为零时它也可以为零,只要处理程序不需要 typelem 来确定下标结果的类型。 注意,typelem 依赖被认为意味着 元素类型在物理上包含在该类型之中;因此, 该类型的存在可能会限制对元素类型的 DDL 更改。

typarray oid (references pg_type.oid)

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

typinput regproc (references pg_proc.oid)

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

typoutput regproc (references pg_proc.oid)

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

typreceive regproc (references pg_proc.oid)

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

typsend regproc (references pg_proc.oid)

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

typmodin regproc (references pg_proc.oid)

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

typmodout regproc (references pg_proc.oid)

类型修饰符输出函数;如果为零则使用标准格式

typanalyze regproc (references pg_proc.oid)

自定义的 ANALYZE 函数,为零则使用标准函数

typalign char

typalign 是存储该类型的值时 所需的对齐。它既适用于磁盘上的存储, 也适用于 PostgreSQL 内部该值的 大多数表示形式。当多个值连续存储时 (例如磁盘上一行的完整表示), 会在该类型的数据之前插入填充,使其从指定的边界开始。 对齐参考是序列中第一个数据的起始位置。 可能的取值有:

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

  • s = short alignment (2 bytes on most machines).

  • i = int alignment (4 bytes on most machines).

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

typstorage char

typstorage 说明对于 varlena 类型 (typlen = -1 的类型), 该类型是否已为 TOAST 做好准备, 以及该类型属性的默认策略应当是什么。 可能的取值有:

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

  • e(外部):值可以存储在一个次要的 “TOAST” 关系中 (如果该关系有的话,参见 pg_class.reltoastrelid)。

  • m (main): Values can be compressed and stored inline.

  • x(扩展的):值可以被压缩并且/或者被移动到一个二级关系中。

x is the usual choice for toast-able types. Note that m values can also be moved out to secondary storage, but only as a last resort (e and x values are moved first).

typnotnull bool

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

typbasetype oid (references pg_type.oid)

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

typtypmod int4

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

typndims int4

typndims 是数组之上的域的 数组维数(即 typbasetype 是一个数组类型)。 对于数组类型域之外的其他类型则为零。

typcollation oid (references pg_collation.oid)

typcollation 指定该类型的排序规则。 如果该类型不支持排序规则,则为零。 支持排序规则的基本类型在这里会有一个非零值, 通常是 DEFAULT_COLLATION_OID。 可排序类型之上的域可以拥有与其基类型不同的排序规则 OID, 前提是为该域指定了一个。

typdefaultbin pg_node_tree

如果 typdefaultbin 不为空, 它是该类型默认表达式的 nodeToString() 表示形式。它只用于域。

typdefault text

如果该类型没有关联的默认值, 则 typdefault 为空。 如果 typdefaultbin 不为空, 则 typdefault 必须包含 typdefaultbin 所表示默认表达式的 人类可读版本。如果 typdefaultbin 为空而 typdefault 不为空, 则 typdefault 是该类型默认值的 外在表示,可以把它提供给该类型的输入转换器来产生一个常量。

typacl aclitem[]

访问特权;详见 Section 5.8


Note

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

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

Table 52.65. typcategory Codes

CodeCategory
AArray types
BBoolean types
CComposite types
DDate/time types
EEnum types
GGeometric types
INetwork address types
NNumeric types
PPseudo-types
RRange types
SString types
TTimespan types
UUser-defined types
VBit-string types
Xunknown type
ZInternal-use types