更新时间:2024-06-03 GMT+08:00

PG_TYPE

PG_TYPE系统表存储数据类型的相关信息。

表1 PG_TYPE字段

名称

类型

描述

oid

oid

行标识符(隐含属性,必须明确选择)。

typname

name

数据类型名称。

typnamespace

oid

包含这个类型的名称空间的OID。

typowner

oid

该类型的所有者。

typlen

smallint

对于定长类型是该类型内部表现形式的字节数目。对于变长类型是负数。
  • -1表示一种“变长”(有长度字属性的数据)。
  • -2表示这是一个NULL结尾的C字符串。

typbyval

boolean

  • true:指定内部传递这个类型的数值时是传值。
  • false:指定内部传递这个类型的数值时是传引用。

如果该类型的typlen不是1、2、4、8, typbyval建议传引用,也可以传值。变长类型通常是传引用,也可以传值。

typtype

"char"

  • b:基础类型。
  • c:复合类型(比如,一个表的行类型)。
  • d:域类型。
  • p:伪类型。
  • u:未定义类型。
  • o:集合类型。

参见typrelid和typbasetype。

typcategory

"char"

是数据类型的模糊分类,可用于解析器作为数据转换的依据。

typispreferred

boolean

  • true:数据符合typcategory所指定的转换规则时进行转换。
  • false:不进行转换。

typisdefined

boolean

  • true:表示类型已定义。
  • false:表示是一种尚未定义的类型的占位符,此时,除了该类型的名称、名称空间和OID之外没有可靠的信息。

typdelim

"char"

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

typrelid

oid

如果是复合类型(请参见typtype),则这个字段指向12.2.15.28 PG_CLASS中定义该表的行。对于自由存在的复合类型,pg_class记录并不表示一个表,但是总需要它来查找该类型连接的12.2.15.26 PG_ATTRIBUTE记录。对于非复合类型为零。

typelem

oid

如果不为0,则它标识pg_type里面的另外一行。当前类型可以当做一个产生类型为typelem的数组来描述。一个“真正的”数组类型是变长的(typlen= -1),但是一些定长的(typlen > 0)类型也拥有非零的typelem(比如name和point)。如果一个定长类型拥有一个typelem ,则他的内部形式必须是typelem数据类型的某个数目的个数值,不能有其它数据。变长数组类型有一个该数组子过程定义的头(文件)。

typarray

oid

如果不为0,则表示在pg_type中有对应的类型记录。

typinput

regproc

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

typoutput

regproc

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

typreceive

regproc

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

typsend

regproc

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

typmodin

regproc

输入类型修改符函数,如果没有则为0。

typmodout

regproc

输出类型修改符函数,如果没有则为0。

typanalyze

regproc

自定义的ANALYZE函数,如果使用标准函数,则为0。

typalign

"char"

当存储此类型的数值时要求的对齐性质。它应用于磁盘存储以及该值的大多数形式。如果数值是连续存放的,比如在磁盘上以完全的裸数据的形式存放时,则先在此类型的数据前填充空白,这样它就可以按照要求的界限存储。对齐引用是该序列中第一个数据的开头。可能的值包含:
  • c:表示char对齐,也就是不需要对齐。
  • s:表示short对齐(在大多数机器上是2字节)。
  • i:表示int对齐(在大多数机器上是4字节)。
  • d:表示double对齐(在大多数机器上是8字节,但不一定是全部)。
须知:

对于在系统表里使用的类型,在pg_type里定义的尺寸和对齐必须和编译器在一个表示表的一行的结构里的布局一样。

typstorage

"char"

指明一个变长类型(那些有typlen = -1)是否准备好应付非常规值,以及对这种属性的类型的缺省策略是什么。可能的值包含:
  • p:数值总是以简单方式存储。
  • e:数值可以存储在一个“次要”关系中(如果该关系有这么一个,请参见12.2.15.28 PG_CLASS.reltoastrelid)。
  • m:数值可以以内联的压缩方式存储。
  • x:数值可以以内联的压缩方式或者在“次要”表里存储。
须知:

m域也可以移到从属表里存储,但只是最后的解决方法(e和x域先移走)。

typnotnull

boolean

该类型是否存在NOTNULL约束。目前只用于域。

typbasetype

oid

如果这是一个衍生类型(请参见typtype),则该标识作为这个类型的基础的类型。如果不是衍生类型则为零。

typtypmod

integer

域使用typtypmod记录要作用到它们的基础类型上的typmod(如果基础类型不使用typmod则为-1)。如果这种类型不是域,则为-1。

如果该类型是数组类型则typtypmod是数组类型的最大容量。

如果该类型是带索引的集合类型则typtypmod是该集合类型的索引最大长度。

typndims

integer

如果一个域是数组,则typndims是数组维数的数值。非域非数组域为零。

typcollation

oid

指定类型的排序规则。取值请参见PG_COLLATION系统表。如果为0,则表示不支持排序。

typdefaultbin

pg_node_tree

如果为非NULL,则它是该类型缺省表达式的nodeToString() 表现形式。目前这个字段只用于域。

typdefault

text

如果某类型没有相关缺省值,则取值是NULL。

  • 如果typdefaultbin为非NULL,则typdefault必须包含一个typdefaultbin代表的缺省表达式。
  • 如果typdefaultbin为NULL但typdefault不是,typdefault则是该类型缺省值的外部表现形式,可以把它作为该类型的输入,转换器生成一个常量。

typacl

aclitem[]

访问权限。

typelemmod

integer

  • -1:表示集合和数组类型对应元素类型不需要typmod。
  • >=0的数值:表示集合和数组类型对应元素类型的typmod值。
  • NULL:表示集合和数组类型对应元素类型的typmod未知。

typmod通常指类型的最大长度。