
# PG_TYPE
PG_TYPE系统表存储数据类型的相关信息。
表1PG_TYPE字段 
| 名称             | 类型           | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
|:---|:---|:---|
| typname        | name         | 数据类型名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| typnamespace   | oid          | 此类型所在的命名空间的OID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| typowner       | oid          | 此类型的所有者。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| typlen         | smallint     | 对于定长类型是该类型内部表现形式的字节数。对于变长类型typlen为负值。 - -1表示一种"变长"（有长度字属性的数据）。  - -2表示一个以NULL结尾的C字符串。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| typbyval       | boolean      | 指定内部传递这个类型的数值时是传值还是传引用。如果该类型的TYPLEN不是1，2，4，8， TYPBYVAL建议设置为false。变长类型通常是传引用。即使TYPLEN允许传值，TYPBYVAL也可以为false。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| typtype        | "char"       | - b表示基础类型。  - c表示复合类型（比如，一个表的行类型）。  - e表示枚举类型。  - p表示伪类型。   参见typrelid和typbasetype。                                                                                                                                                                                                                                                                                                                                                               |
| typcategory    | "char"       | 数据类型的模糊分类，可用于解析器使用的数据转换依据。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| typispreferred | boolean      | 如果为真，则数据符合TYPCATEGORY所指定的转换规则时进行转换。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| typisdefined   | boolean      | 如果定义了类型，则为真。如果是一种尚未定义的类型的占位符，则为假。如果为假，则除了该类型名称，命名空间和OID之外没有可依赖的对象。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| typdelim       | "char"       | 分析数组输入时，分隔两个此类型数值的字符。请注意，分隔符是与数组元素数据类型相关联，而不是与数组数据类型相关联。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| typrelid       | oid          | 如果是复合类型（请参见typtype），则此字段指向pg_class中定义该表的行。对于独立的复合类型，pg_class记录并不表示一个表，但是总需要它来查找该类型连接的pg_attribute记录。非复合类型为0。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| typelem        | oid          | 如果不为0，则它标识pg_type中的另一行。当前类型可以像一个产生类型为typelem的数组来描述。"true"数组类型是变长的（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：数值可以存储在一个"次要"关系中（如果有该关系，请参见pg_class.reltoastrelid）。  - m：数值可以以内联压缩方式存储。  - x：数值可以以内联压缩方式或者在"次要"表里存储。   须知： m域也可以移到从属表里存储，但只是最后的解决方法（首先移动e和x域）。                                                                           |
| typnotnull     | boolean      | 表示在某类型上的一个NOTNULL约束。目前只用于域。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| typbasetype    | oid          | 如果这是一个衍生类型（请参见typtype），则该标识作为这个类型的基础的类型。如果不是衍生类型则为零。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| typtypmod      | integer      | 域使用typtypmod记录要应用于其基础类型上的typmod（如果基础类型不使用typmod，则为-1）。如果此类型不是域，则为-1。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| typndims       | integer      | 如果一个域是数组，则typndims是数组维数的数值（即typbasetype是一个数组类型；域的typelem将匹配基本类型的typelem）。除了数组类型的域以外的类型为0。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| typcollation   | oid          | 指定类型的排序规则。如果为0，则表示不支持排序规则。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| typdefaultbin  | pg_node_tree | 如果不为NULL，则为该类型缺省表达式的nodeToString() 表现形式。目前这个字段只用于域。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| typdefault     | text         | 如果某类型没有相关缺省值，则为NULL。如果typdefaultbin不为NULL，则typdefault必须包含一个typdefaultbin代表的缺省表达式的人类可读版本。如果typdefaultbin为NULL但typdefault不为NULL，typdefault则是该类型缺省值的外部表现形式，可以将其输入到类型的转换器生成一个常量。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| typacl         | aclitem\[\]  | 访问权限。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   
