选择 打开 改范围 完整检索页
受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10
当前 PostgreSQL 版本不在支持生命周期内。
您可以参阅当前版本的对应页面,或其他在上面列出的活跃大版本。

52.62. pg_type #

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

Table 52.62. pg_type

Name 类型 引用 描述
oid oid   行标识符(隐藏属性,必须显式选择)
typname 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最好是假。 变长类型总是传引用。注意即使长度允许传值, typbyval也可以为假。
typtype char   typtype可以是: b表示一个基类型, c表示一个复合类型(例如一个表的行类型), d表示一个域, e表示一个枚举类型, p表示一个伪类型, r表示一个范围类型。 另请参阅typrelidtypbasetype
typcategory char   typcategory是一种任意的数据类型分类,它被分析器用来决定哪种隐式转换更好。参见Table 52.63
typispreferred bool   如果此类型在它的typcategory中是一个更好的转换目标,此列为真
typisdefined bool   如果此类型已被定义则为真,如果此类型只是一个表示还未定义类型的占位符则为假。 当typisdefined为假,除了类型名字、名字空间和OID之外什么都不能被依赖。
typdelim char   在分析数组输入时,分隔两个此类型值的字符。注意该分隔符是与数组元素数据类型相关联的, 而不是和数组的数据类型关联。
typrelid oid pg_class.oid 如果这是一个复合类型(见typtype),那么此列指向pg_class中定义对应表的项 (对于自由存在的复合类型,pg_class项并不表示一个表,但不管怎样该类型的pg_attribute项需要链接到它)。 对非复合类型此列为零。
typelem oid pg_type.oid 如果typelem不为 0,则它标识pg_type中的另一行。 此时可以像数组一样对当前类型使用下标,得到typelem类型的值。 真正的数组类型是变长的(typlen = -1), 但某些定长类型(typlen > 0)的typelem也非零, 例如namepoint。 如果定长类型具有typelem,则其内部表示必须是若干个typelem数据类型的值,不含其他数据。 变长数组类型的首部由数组子例程定义。
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字节,但绝不是全部)。

Note

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

typstorage char  

typstorage用于指示 varlena 类型(即typlen = -1)是否支持 TOAST,以及这种类型的属性应采用什么默认策略。可能的值为:

  • p:值必须始终以普通方式存储。

  • e:值可以存储在一个二级关系中(如果关系有这样的关系,参见pg_class.reltoastrelid)。

  • m:值可以被压缩并内联存储。

  • x:值可以被压缩并内联存储,或存储在二级存储中。

注意,m列也可以被移动到二级存储,但只能作为最后手段(ex列会先被移动)。

typnotnull bool  

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

typbasetype oid pg_type.oid

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

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非空,那么它就是该类型默认表达式的nodeToString()表示形式。此列只用于域。

typdefault text  

如果某类型没有相关默认值,那么typdefault为空。如果typdefaultbin不为空,那么typdefault必须包含由typdefaultbin表示的默认表达式的人类可读版本。 如果typdefaultbin为空而typdefault不为空,则typdefault是该类型默认值的外部表示形式,它可以被交给该类型的输入转换器来产生一个常量。

typacl aclitem[]   访问权限,详见GRANTREVOKE

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

Table 52.63. typcategory Codes

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