您的位置:寻梦网首页编程乐园数据库PostgreSQL 7.2 Documentation

3.21. pg_type

这个系统表存储有关数据类型的信息.标量类型 ( "基本类型" )是用 CREATE TYPE 创建的. 同时还为数据库中每个表创建一个复合类型,以表示该表的行结构.

Table 3-21. pg_type 字段

名字 类型 引用 描述
typname name   数据类型名字
typowner int4 pg_shadow.usesysid 该类型的所有人(创建人)
typlen int2   该类型存储形式的长度,如果是变长为 -1
typprtlen int2   未用
typbyval bool   typbyval 判断内部过程传递这个类型的数值时 是通过传值还是传引用. 只有 char short ,和 int 或相当的项目可以传值,所以如果该类型不是 1,2,4字节长, PostgreSQL 不会有传值的选择,因此 typbyval 最好是假. 变长类似总是传引用.请注意即使长度可以传值, typbyval 也可以为假; 比如,现在 float4 就是如此.
typtype char   typtype 对于基础类型 是 b ,对于复合类型是 c (也就是说,一个表的行类型). 如果 typtype c ,那么 typrelid 是该类型在 pg_class 里的元组的 OID.
typisdefined bool   如果定义了类型则为真,如果是一种尚未定义的类型的占位符则为假. 如果 typisdefined 为假,那么除了该类型名称和 OID 之外没有 可靠的信息.
typdelim char   当分析数组输入时,分隔两个此类型数值的字符 请注意该分隔符是与数组元素数据类型相关联的, 而不是和数组数据类型关联.
typrelid oid pg_class.oid 如果是复合类型(见 typtype ) 那么这个字段指向 pg_class 中定义该表的元组. 表在理论上应该用做复合数据类型,不过现在不是完全都能工作.
typelem oid pg_type.oid 如果 typelem 不为 0, 那么它标识 pg_type 里面的另外一行. 当前类型可以当做一个产生类型为 typelem 的数组来描述. 一个 "真正的" 数组类型是变长的 ( typlen = -1), 但是一些定长的( typlen > 0)类型 也拥有非零的 typelem ,比如 name oidvector . 如果一个定长类型拥有一个 typelem , 那么他的内部形式必须是 typelem 数据类型的 N 个数值,不能有其它数据.变长数组类型有一个该数组子过程定义的头(文件).
typinput regproc   输入函数
typoutput regproc   输出函数
typreceive regproc   未用
typsend regproc   未用
typalign char  

typalign 是当存储此类型的数值是要求的对齐性质.它应用于磁盘存储以及 该值在 PostgreSQL 内部的大多数形式. 如果数值是连续存放的,比如在磁盘上以完全的裸数据的形式存放时, 那么先在此类型的数据前填充空白,这样它就可以按照要求的界限存储. 对齐引用是该序列中第一个数据的开头.

可能的值有:

  • 'c' = CHAR 对齐,也就是不需要对齐.

  • 's' = SHORT 对齐 (在大多数机器上是 2字节)

  • 'i' = INT 对齐 (在大多数机器上是 4 字节)

  • 'd' = DOUBLE 对齐 (在大多数机器上是 8 字节,但不一定是全部)

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

typstorage char  

typstorage 告诉一个变长类型(那些有 typlen = -1的) 说该类型是否准备 toast,以及对这种属性的类型 的缺省策略是什么. 可能的值有

  • 'p': 数值必须总是以平面方式存储

  • 'e': 数值可以存储在一个 "从属" 关系中(如果该关系有这么一个,参阅 pg_class . reltoastrelid ).

  • 'm': 数值可以以内联的压缩方式存储

  • 'x': 数值可以以内联的压缩方式或者在 "从属" 表里存储.

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

typdefault text  

对那些没有缺省值的类型, typdefault 是 NULL.如果它不是 NULL,那么它包含该类型缺省值的外部字串表现形式.