3.29. pg_type #
该目录存储关于数据类型的信息。标量类型(“基本类型”)用 CREATE TYPE 创建。数据库中的每个表都会自动创建一个复杂类型,以表示该表的行结构。还可以用 CREATE TYPE AS 创建复杂类型,用 CREATE DOMAIN 创建派生类型。
表 3.29. pg_type 列
| 名称 | 类型 | 引用 | 描述 |
|---|---|---|---|
| typname | name | 数据类型的名字 | |
| typnamespace | oid | pg_namespace.oid | 包含此类型的名字空间的OID |
| typowner | int4 | pg_shadow.usesysid | 类型的所有者(创建者) |
| typlen | int2 | 对于一个固定尺寸的类型,typlen是该类型内部表示的字节数。对于一个变长类型,typlen为负值。-1表示一个“varlena”类型(具有长度字),-2表示一个以空值结尾的C字符串。
| |
| typbyval | bool | typbyval 决定内部例程按值还是按引用传递该类型的值。只有等价于 char、short 和 int 的项可以按值传递,因此如果类型长度不是 1、2 或 4 字节,PostgreSQL 就没有按值传递的选项,因此 typbyval 最好为假。变长类型总是按引用传递。注意,即使长度允许按值传递,typbyval 也可以为假;例如 float4 类型目前就是这样。 | |
| typtype | char | typtype 为 b 表示基本类型,c 表示复杂类型(即表的行类型),d 表示派生类型(即域),p 表示伪类型。另见 typrelid 和 typbasetype。 | |
| 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,例如 name 和 oidvector。如果定长类型有 typelem,其内部表示必须是 N 个 typelem 数据类型的值,不含其他数据。变长数组类型有一个由数组子例程定义的头部。 |
| typinput | regproc | pg_proc.oid | 输入转换函数 |
| typoutput | regproc | pg_proc.oid | 输出转换函数 |
| typalign | char | 可能的取值有:
注意 对于系统表中使用的类型,在 | |
| typstorage | char |
注意 'm' 列也可以移出到二级存储,但只作为最后手段('e' 和 'x' 列会先被移动)。 | |
| typnotnull | bool | | |
| typbasetype | oid | pg_type.oid | 如果这是派生类型(见 |
| typtypmod | int4 | 域使用 | |
| typndims | int4 | | |
| typdefaultbin | text | 如果 | |
| typdefault | text | |