51.62. pg_type

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

表 51.62. pg_type

NameTypeReferencesDescription
oidoid 行标识符(隐藏属性;必须显式选择)
typnamename 数据类型名称
typnamespaceoidpg_namespace.oid包含此类型的名称空间的 OID
typowneroidpg_authid.oid类型的所有者
typlenint2 对于固定大小的类型,typlen是该类型的内部表示形式中的字节数。但是对于可变长度类型,typlen为负数。 -1 表示“ varlena”类型(一个带有长度字的类型),-2 表示以 N 结尾的 C 字符串。
typbyvalbool typbyval确定内部例程是按值还是按引用传递此类型的值。如果typlen不是 1、2 或 4(或 Datum 为 8 字节的机器上为 8),则typbyval最好为 false。可变长度类型始终通过引用传递。请注意,即使长度允许值传递,typbyval也可以为 false。
typtypechar typtypeb(对于基本类型),c(对于复合类型(例如,表的行类型)),d(对于域),e(对于枚举类型),p(对于伪类型)或r(对于范围类型)。另请参见typrelidtypbasetype
typcategorychar typcategory是数据类型的任意分类,解析器使用该分类来确定应“首选”哪些隐式强制类型转换。参见Table 51.63
typispreferredbool 如果类型是其typcategory中的首选强制转换目标,则为 true
typisdefinedbool 如果定义了类型,则为 true;如果这是尚未定义的类型的占位符条目,则为 false。当typisdefined为 false 时,除了类型名称,名称空间和 OID 之外,别无其他依赖。
typdelimchar 解析数组 Importing 时分隔此类型的两个值的字符。请注意,分隔符与数组元素数据类型相关联,而不与数组数据类型相关联。
typrelidoidpg_class.oid如果这是复合类型(请参见typtype),则此列指向定义相应表的pg_class条目。 (对于独立的复合类型,pg_class条目实际上并不表示表,但是无论如何,该类型的pg_attribute条目都需要链接到该表.)非复合类型为零。
typelemoidpg_type.oid如果typelem不为 0,则它将标识pg_type中的另一行。然后,可以像对产生typelem类型值的数组那样对当前类型进行下标。 “ true”数组类型是可变长度(typlen = -1),但是某些固定长度(typlen> 0)类型也具有非零typelem,例如namepoint。如果固定长度类型具有typelem,则其内部表示形式必须是typelem数据类型的一些值,并且没有其他数据。可变长度数组类型具有由数组子例程定义的 Headers。
typarrayoidpg_type.oid如果typarray不为 0,则它将标识pg_type中的另一行,这是具有该类型作为元素的“真”数组类型
typinputregprocpg_proc.oidImporting 转换功能(文本格式)
typoutputregprocpg_proc.oid输出转换功能(文本格式)
typreceiveregprocpg_proc.oidImporting 转换函数(二进制格式),如果没有则为 0
typsendregprocpg_proc.oid输出转换函数(二进制格式),如果没有则为 0
typmodinregprocpg_proc.oid类型修饰符 Importing 函数;如果类型不支持修饰符,则返回 0
typmodoutregprocpg_proc.oid类型修饰符输出函数,或 0 以使用标准格式
typanalyzeregprocpg_proc.oid自定义ANALYZE函数,或 0 以使用标准函数
typalignchar typalign是存储此类型的值时所需的对齐方式。它适用于磁盘上的存储以及 PostgreSQL 内部值的大多数表示形式。当连续存储多个值时(例如在磁盘上完整行的表示中),将在此类型的数据之前插入填充,以使填充开始于指定的边界。对齐参考是序列中第一个基准的起点。


可能的值为:
c = char对齐,即无需对齐。
s = short对齐(在大多数计算机上为 2 字节)。
i = int对齐(在大多数计算机上为 4 字节)。
d = double对齐(在许多机器上为 8 字节,但绝不是全部)。

Note





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



|
| typstorage | char | | typstorage告知 varlena 类型(typlen = -1 的类型)是否准备好烘烤,以及该类型的属性的默认策略应该是什么。可能的值是

> p:必须始终将值存储为纯格式。

> e:值可以“次要”关系存储(如果关系中有一个,请参见pg_class.reltoastrelid)。

> m:可以内联压缩存储值。

> 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。
| typdefaultbin | pg_node_tree | |如果typdefaultbin不为空,则它是该类型的缺省表达式的nodeToString()表示形式。仅用于域。
| typdefault | text | |如果类型没有关联的默认值,则typdefault为 null。如果typdefaultbin不为 null,则typdefault必须包含由typdefaultbin表示的默认表达式的可读版本。如果typdefaultbin为 null 而typdefault不是 null,则typdefault是该类型默认值的外部表示,可以将其馈送到该类型的 Importing 转换器以产生一个常量。
| typacl | aclitem[] | |访问权限;有关详情,请参见GRANTREVOKE |

Table 51.63列出了typcategory的系统定义值。将来在此列表中添加的内容也将是大写的 ASCII 字母。所有其他 ASCII 字符均保留用于用户定义的类别。

表 51.63. typcategory代码

CodeCategory
AArray types
BBoolean types
CComposite types
DDate/time types
EEnum types
GGeometric types
I网络地址类型
NNumeric types
PPseudo-types
RRange types
SString types
TTimespan types
UUser-defined types
VBit-string types
Xunknown类型