pg_type
目录pg_type
存储有关数据类型的信息。基类和枚举类型(标度类型)使用CREATE TYPE创建,而域使用CREATE DOMAIN创建。数据库中的每一个表都会有一个自动创建的组合类型,用于表示表的行结构。也可以使用CREATE TYPE AS
创建组合类型。
表 51.63. pg_type
的列
名称 | 类型 | 引用 | 描述 |
---|---|---|---|
oid | oid | 行标识符 | |
typname | name | 数据类型的名字 | |
typnamespace | oid |
| 包含此类型的名字空间的OID |
typowner | oid |
| 类型的拥有者 |
typlen | int2 |
对于一个固定尺寸的类型,typlen 是该类型内部表示的字节数。对于一个变长类型,typlen 为负值。-1表示一个“varlena”类型(具有长度字),-2表示一个以空值结尾的C字符串。
| |
typbyval | bool |
typbyval 判断内部例程传递这个类型的数值时是通过传值还是传引用。如果typlen 不是1、2或4(或者在Datum为8字节的机器上为8),因此typbyval 最好是假。变长类型总是传引用。注意即使长度允许传值, typbyval 也可以为假。
| |
typtype | char |
typtype 可以是:
b 表示一个基类,
c 表示一个组合类型(例如一个表的行类型),
d 表示一个域,
e 表示一个枚举类型,
p 表示一个伪类型,或
r 表示一个范围类型。
另请参阅typrelid 和typbasetype .
| |
typcategory | char |
typcategory 是一种任意的数据类型分类,它被分析器用来决定哪种隐式转换“更好”。参见表 51.64。
| |
typispreferred | bool |
如果此类型在它的typcategory 中是一个更好的转换目标,此列为真
| |
typisdefined | bool |
如果此类型已被定义则为真,如果此类型只是一个表示还未定义类型的占位符则为假。当typisdefined 为假,除了类型名字、名字空间和OID之外什么都不能被依赖。
| |
typdelim | char | 在分析数组输入时,分隔两个此类型值的字符。注意该分隔符是与数组元素数据类型相关联的, 而不是和数组的数据类型关联。 | |
typrelid | oid |
|
如果这是一个复合类型(见typtype ), 那么这个列指向pg_class 中定义对应表的项(对于自由存在的复合类型,pg_class 项并不表示一个表,但不管怎样该类型的pg_attribute 项需要链接到它)。对非复合类型此列为零。
|
typelem | oid |
|
如果typelem 不为0,则它标识pg_type 里面的另外一行。 当前类型可以被加上下标得到一个值为类型typelem 的数组来描述。 一个“真的”数组类型是变长的(typlen = -1),但是一些定长的(typlen > 0)类型也拥有非零的typelem ,比如name 和point 。 如果一个定长类型拥有一个typelem , 则它的内部形式必须是某个typelem 数据类型的值,不能有其它数据。变长数组类型有一个由该数组子例程定义的头。
|
typarray | oid |
|
如果typarray 不是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 |
可能的值有:
注意
对于系统表中使用的类型,很关键的是, | |
typstorage | char |
如果一个变长类型(
注意 | |
typnotnull | bool |
| |
typbasetype | oid |
|
如果这是一个域(见 |
typtypmod | int4 |
域使用 | |
typndims | int4 |
对于一个数组上的域, | |
typcollation | oid |
|
|
typdefaultbin | pg_node_tree |
如果 | |
typdefault | text |
如果某类型没有相关默认值,那么 | |
typacl | aclitem[] | 访问权限,另请参阅第 5.7 节 |
表 51.64列出了typcategory
的系统定义值。任何未来对此列表的增加都将是大写ASCII字母。所有其他ASCII字符都保留给用户定义的类别。
表 51.64. typcategory
编码
编码 | 类别 |
---|---|
A | 数组类型 |
B | 布尔类型 |
C | 组合类型 |
D | 日期/时间类型 |
E | 枚举类型 |
G | 几何类型 |
I | 网络地址类型 |
N | 数字类型 |
P | 伪类型 |
R | 范围类型 |
S | 字符串类型 |
T | 时间间隔类型 |
U | 用户定义类型 |
V | 位串类型 |
X | 未知 类型 |