Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

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 确定内部例程是按值传递此类型的某个值还是按引用传递。如果 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 确定下标结果类型,则 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 会说明变长类型(那些具有 typlen = -1 的类型)的类型是否已准备写入 TOAST,以及应该如何设定此类型的属性的默认策略。可能的值包括:

  • p(纯):值必须始终存储为纯值(非变长类型始终使用此值)。

  • e(外部):值可以存储在辅助 TOAST 关系中(如果关系包含该关系,请参阅 pg_class.reltoastrelid)。

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

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

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,那么可整理类型的域可以拥有不同于其基本类型的字符集整理规则 OID。

typdefaultbin pg_node_tree

如果 typdefaultbin 不为 null,则为该类型的默认表达式的 nodeToString() 表示形式。该值仅对域使用。

typdefault text

如果该类型没有关联的默认值,则 typdefault 为空。如果 typdefaultbin 不为空,typdefault 必须包含由 typdefaultbin 表示的默认表达式的人类可读版本。如果 typdefaultbin 为空且 typdefault 不为空,则 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 内部使用类型