45.44. pg_type

The catalog pg_type stores information about data types. Base types and enum types (scalar types) are created with CREATE TYPE, and domains with CREATE DOMAIN. A composite type is automatically created for each table in the database, to represent the row structure of the table. It is also possible to create composite types with CREATE TYPE AS.

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

Table 45-44. pg_type Columns

名称类型引用描述
typnamename 数据类型名
typnamespaceoidpg_namespace.oid 包含这个类型的名字空间的OID
typowneroidpg_authid.oid 该类型的所有者
typlenint2  对于定长类型typlen是该类型内部表现形式的字节数。 对于变长类型typlen是负数。 -1表示一种"变长"类型(有长度字属性的数据), -2表示这是一个NULL结尾的C字符串。
typbyvalbool  typbyval判断内部过程传递这个类型的数值时是通过传值还是传引用。 如果该typlen类型不是1, 2, 4, 8字节长将只能按引用传递, 变长类型总是按引用。请注意typbyval可以为假,即使允许传值。
typtypechar  typtype 对于基础类型是b,对于复合类型是c(比如,一个表的行类型)。 对于域类型是dE的枚举类型,对于伪类型是p。 还可参阅typrelidtypbasetype
typcategorychar  typcategory是一个使用解析器以确定其中隐含映射是"首选"的数据类型的 任意分类。参阅Table 45-45
typispreferredbool  如果类型在typcategory中是一个更好的目标则为真。
typisdefinedbool  如果定义了类型则为真,如果是一种尚未定义的类型的占位符则为假。 如果typisdefined为假,那么除了该类型名,命名空间,和OID之外没有可靠的信息。
typdelimchar  Character that separates two values of this type when parsing array input. Note that the delimiter is associated with the array element data type, not the array data type. 当分析数组输入时,分隔两个此类型数值的字符请注意该分隔符是与数组元素数据类型相关联的,而不是和数组数据类型关联。
typrelidoidpg_class.oid 如果是复合类型(参阅typtype)那么这个字段指向pg_class中定义该表的行。对于自由存在的复合类型, pg_class记录并不表示一个表,但是总需要它来查找该类型连接的pg_attribute记录。对于非复合类型为零。
typelemoidpg_type.oid 如果typelem不为0 ,那么它标识pg_type里面的另外一行。当前类型可以当做一个产生类型为typelem的数组来描述。 一个"真的"数组类型是变长的(typlen = -1), 但是一些定长的(typlen > 0)类型也拥有非零的typelem,比如namepoint。 如果一个定长类型拥有一个typelem,那么它的内部形式必须是typelem数据类型的某个数目的数值, 不能有其它数据。变长数组类型有一个该数组子过程定义的头(文件)。
typarrayoidpg_type.oid 如果typarray不为0, 标识pg_type的另一行, 则"true"数组类型有这种类型作为元素。
typinputregprocpg_proc.oid输入转换函数(文本格式)
typoutputregprocpg_proc.oid输出转换函数(文本格式)
typreceiveregprocpg_proc.oid输入转换函数(二进制格式),如果没有则为0
typsendregprocpg_proc.oid输出转换函数(二进制格式),如果没有则为0
typmodinregprocpg_proc.oid 类型修饰符输入功能,如果类型不支持修饰符,则为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里定义的大小和对齐必须和编译器在一个表示表的一行的结构里的布局一样。

typstoragechar 

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

  • p: 数值总是以简单方式存储

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

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

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

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

typnotnullbool 

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

typbasetypeoidpg_type.oid

如果这是一个域(参阅typtype),那么typbasetype该标识作为这个类型的基础的类型。如果不是域类型则为零。

typtypmodint4 

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

typndimsint4 

typndims是域的数组维数,其是一个数组(也就是说,typbasetype是一个数组类型; 域的typelem将匹配基本类型的typelem)。非域非数组域为零。

typdefaultbintext 

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

typdefaulttext 

如果某类型没有相关缺省值,那么typdefault是 NULL。如果typdefaultbin不是NULL , 那么typdefault必须包含一个typdefaultbin代表的缺省表达式的人类可读的版本。 如果typdefaultbin为NULL,但typdefault不是,那么typdefault是该类型缺省值的外部表现形式, 可以把它交给该类型的输入转换器生成一个常量。

Table 45-45列出了 typcategory系统定义的值。 任何未来增加的列表也可以是ASCII字母大写。保留所有其他的ASCII字符用户定义的类别。

Table 45-45. typcategory Codes

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