Postgresql 中文操作指南

53.64. pg_type #

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

Table 53.64. pg_type Columns

Column Type

Description

oid oid

Row identifier

typname name

Data type 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 是数据类型的一种任意分类,其由解析器使用来确定应该“首选”哪种隐式强制转换。请参阅 Table 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,如果该类型不支持下标,则为零。这类型为“真”数组类型时, 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 中的另一行,该行是具有该类型作为元素的“真”数组类型

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 的类型),表明该类型是否已准备用于 toasted 处理,以及此类型属性的默认策略应该是什么。可能值: p (纯):值必须始终存储为纯值(非 varlena 类型始终使用此值)。 e (外部):值可以存储在二级“TOAST”关联中(如果关联存在一个,请参见 pg_class.reltoastrelid )。 m (主要):值可以压缩并内联存储。 x (扩展):值可以压缩和/或移到二级关联。 x 是可以进行 toasted 处理类型的常用选项。请注意 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[] 访问权限;有关详细信息,请参阅 Section 5.7

Note

对于系统表中使用的固定宽度类型,关键是 pg_type 中定义的大小和对齐与编译器在表示表行的结构中布局列的方式保持一致。

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

Table 53.65. typcategory Codes

Code

Category

A

Array types

B

Boolean types

C

Composite types

D

Date/time types

E

Enum types

G

Geometric types

I

Network address types

N

Numeric types

P

Pseudo-types

R

Range types

S

String types

T

Timespan types

U

User-defined types

V

Bit-string types

X

unknown type

Z

Internal-use types