PostgreSQL 9.4.4 中文手册 | |||
---|---|---|---|
上一页 | 上一级 | 章 48. 系统表 | 下一页 |
pg_type存储有关数据类型的信息。基本类型和枚举类型(标量类型)是用 CREATE TYPE创建的,域是使用CREATE DOMAIN创建的。 同时还为数据库中每个表自动创建一个复合类型,以表示该表的行结构。还可以用 CREATE TYPE AS创建复合类型。
表 48-52. pg_type 字段
名字 | 类型 | 引用 | 描述 |
---|---|---|---|
oid | oid | 行标识符(隐藏属性;必须明确选择) | |
typname | name | 数据类型名 | |
typnamespace | oid | pg_namespace.oid | 包含这个类型的名字空间的OID |
typowner | oid | pg_authid.oid | 该类型的所有者 |
typlen | int2 | 对于定长类型是该类型内部表现形式的字节数目。对于变长类型是负数。 -1 表示一种"变长"类型(有长度字属性的数据), -2 表示这是一个 NULL 结尾的 C 字符串。 | |
typbyval | bool | 判断内部过程传递这个类型的数值时是通过传值还是传引用。 如果该类型不是 1, 2, 4, 8 字节长将只能按引用传递,因此 typbyval 最好是假。 即使可以传值,typbyval 也可以为假。 | |
typtype | char | 对于基础类型是b,对于复合类型是c (比如,一个表的行类型)。对于域类型是d,对于枚举类型是e, 对于伪类型是p,对于范围类型是r。 又见typrelid和typbasetype。 | |
typcategory | char | typcategory是数据类型的任意分类, 该数据类型被触发器用来决定哪种隐式转换应该是"首选"。 参阅表 48-53。 | |
typispreferred | bool | 如果类型在它的typcategory 里是首选转换目标则为真。 | |
typisdefined | bool | 如果定义了类型则为真,如果是一种尚未定义的类型的占位符则为假。如果为假, 那么除了该类型名称,名字空间,和 OID 之外没有可靠的信息。 | |
typdelim | char | 当分析数组输入时,分隔两个此类型数值的字符。请注意该分隔符是与数组元素数据类型相关联的, 而不是和数组数据类型关联。 | |
typrelid | oid | pg_class.oid | 如果是复合类型(见typtype)那么这个字段指向pg_class 中定义该表的行。对于自由存在的复合类型,pg_class记录并不表示一个表, 但是总需要它来查找该类型连接的pg_attribute记录。对于非复合类型为零。 |
typelem | oid | pg_type.oid | 如果不为 0 ,那么它标识pg_type里面的另外一行。 当前类型可以像一个数组产生类型为typelem的值一样当做下标。 一个"真正的"数组类型是变长的(typlen = -1), 但是一些定长的(typlen > 0)类型也拥有非零的typelem (比如name和point)。如果一个定长类型拥有一个typelem, 那么他的内部形式必须是typelem数据类型的某个数目的个数值, 不能有其它数据。变长数组类型有一个该数组子过程定义的头(文件)。 |
typarray | oid | pg_type.oid | 如果typarray非零,那么它在pg_type 里定义另外一行,该行是将这个类型作为元素的"真正的"数组类型。 |
typinput | regproc | pg_proc.oid | 输入转换函数(文本格式) |
typoutput | regproc | pg_proc.oid | 输出转换函数(文本格式) |
typreceive | regproc | pg_proc.oid | 输入转换函数(二进制格式),如果没有则为 0 |
typsend | regproc | pg_proc.oid | 输出转换函数(二进制格式),如果没有则为 0 |
typmodin | regproc | pg_proc.oid | 类型修饰符输入函数,如果类型不支持修饰符则为0 |
typmodout | regproc | pg_proc.oid | 类型修饰符输出函数,如果使用标准格式则为0 |
typanalyze | regproc | pg_proc.oid | 自定义的ANALYZE函数,如果使用标准函数,则为 0 |
typalign | char | 当存储此类型的数值时要求的对齐性质。它应用于磁盘存储以及该值在PostgreSQL 内部的大多数形式。如果数值是连续存放的,比如在磁盘上以完全的裸数据的形式存放时, 那么先在此类型的数据前填充空白,这样它就可以按照要求的界限存储。对齐引用是该序列中第一个数据的开头。 可能的值有:
| |
typstorage | char | 告诉一个变长类型(那些有typlen = -1的) 说该类型是否准备好应付非常规值,以及对这种类型的属性的缺省策略是什么。可能的值有
请注意m域也可以移到从属表里存储,但只是最后的解决方法 (e和x域先移走)。 | |
typnotnull | bool | 代表在某类型上的一个 NOTNULL 约束。目前只用于域。 | |
typbasetype | oid | pg_type.oid | 如果这是一个域(参阅typtype), 那么标识作为这个类型的基础的类型。如果不是域则为零。 |
typtypmod | int4 | 域使用typtypmod记录要作用到它们的基础类型上的typmod (如果基础类型不使用typmod则为 -1)。如果这种类型不是域,那么为 -1 。 | |
typndims | int4 | 如果是一个域数组,那么typndims是数组维数的数值(也就是说, typbasetype是一个数组类型)。非域非数组类型为零。 | |
typcollation | oid | pg_collation.oid | 指定类型的排序规则。如果类型不支持排序,则为0。一个支持排序的基础类型将有 DEFAULT_COLLATION_OID。一个可排序类型的域可以有一些其他排序OID, 如果为该域指定了一个的话。 |
typdefaultbin | pg_node_tree | 如果为非 NULL ,那么它是该类型缺省表达式的 | |
typdefault | text | 如果某类型没有相关缺省值,那么typdefault是 NULL 。如果typdefaultbin 不是 NULL ,那么typdefault必须包含一个typdefaultbin 代表的缺省表达式的人类可读的版本。如果typdefaultbin为 NULL 但typdefault 不是,那么typdefault是该类型缺省值的外部表现形式, 可以把它交给该类型的输入转换器生成一个常量。 | |
typacl | aclitem[] | 访问权限;参阅GRANT和REVOKE获取细节。 |
表 48-53列出了系统定义的typcategory的值。 任何未来添加到这个列表的也是大写的ASCII字母。所有其他ASCII字符为用户定义的范畴保留。