pg_type

pg_type

pg_type系统目录表存储有关数据类型的信息。 基类(标量类型)由CREATE TYPE创建。 而域由CREATE DOMAIN创建。 数据库中的每一个表都会有一个自动创建的组合类型,用于表示表的行结构。 也可以使用CREATE TYPE AS创建组合类型。

Table 1. pg_catalog.pg_type
类型 参考 描述
oid oid   行标识符(隐藏属性;必须显示选择)
typname name   数据类型名称
typnamespace oid pg_namespace.oid 包含此类型的命名空间的OID
typowner oid pg_authid.oid 类型的拥有者
typlen int2   对于一个固定尺寸的类型,typlen是该类型内部表示的字节数。 对于一个变长类型,typlen为负值。 -1表示一个“varlena”类型(具有长度字),-2表示一个以null结尾的C字符串。
typbyval boolean   决定内部例程传递这个类型的数值时是通过传值还是传引用方式。 如果typlen不是1、2或4(或者在Datum为8字节的机器上为8),typlen最好是假。 变长类型总是传引用。 注意即使长度允许传值,typbyval也可以为假。
typtype char   b表示基类,c表示组合类型, d表示域,e表示枚举类型,p表示伪类型,或r表示范围类型。 另见typrelidtypbasetype
typcategory char   解析器使用的数据类型的任意分类,以确定应首选哪些隐式转换。 请参阅类别代码
typispreferred boolean   如果类型是其typcategory中的首选转换目标,则为True
typisdefined boolean   如果定义了类型,则为True;如果是尚未定义的类型的占位符条目,则为false。 如果为false,则可以依赖除类型名称,名称空间和OID之外的任何内容。
typdelim char   解析数组输入时分隔此类型的两个值的字符。 请注意,分隔符与数组元素数据类型相关联,而不是与数组数据类型相关联。
typrelid oid pg_class.oid 如果这是复合类型(请参阅typtype),则此列指向定义相应表的pg_class条目。 (对于独立的复合类型,pg_class条目实际上并不代表表,但无论如何都需要将类型的pg_attribute条目链接到。)非复合类型为零。
typelem oid pg_type.oid 如果不为0,则它标识pg_type中的另一行。 然后,当前类型可以像数组一样下标,产生类型为typelem的值。 “true”数组类型是可变长度(typlen = -1), 但某些固定长度(typlen > 0)类型也具有非零typelem,例如namepoint。 如果固定长度类型有typelem,则其内部表示必须是typelem数据类型的某些值,而没有其他数据。 可变长度数组类型具有由数组子例程定义的头。
typarray oid pg_type.oid 如果不为0,则标识pg_type中的另一行,这是具有此类型作为其元素的“true”数组类型。 使用pg_type.typarray查找与特定类型关联的数组类型。
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   存储此类型的值时所需的对齐方式。 它适用于磁盘上的存储以及Greenplum数据库中值的大多数表示。 当连续存储多个值时,例如在磁盘上的完整行的表示中,在此类型的数据之前插入填充,以便它在指定的边界上开始。 对齐参考是序列中第一个数据的开头。 可能的值是:

c = char对齐,即不需要对齐。

s = short对齐(在大部分机器上为2字节)。

i = int对齐(在大部分机器上为4字节)。

d = double对齐(在很多机器上为8字节,但绝不是全部)。

typstorage char   对于varlena类型(具有typlen = -1的那些),告知该类型是否准备好toasting以及该类型的属性的默认策略应该是什么。 可能的值是:

p: 值必须明文存储。

e: 值可以存储在辅助关系中(如果关系有一个,请参阅pg_class.reltoastrelid)。

m: 值可以压缩内联存储。

x: 值可以内联压缩存储或存储在二级存储中。

请注意,m列也可以移出到辅助存储,但仅作为最后的手段(首先移动ex列)。

typnotnull boolean   表示类型的非空约束。仅用于域。
typbasetype oid pg_type.oid 标识域所基于的类型。如果此类型不是域,则为零。
typtypmod int4   域使用typtypmod来记录要应用于其基类型的typmod(如果基类型不使用typmod,则为-1)。 -1如果此类型不是域。
typndims int4   域上数组的数组维数(如果typbasetype是数组类型)。 除了数组类型的域以外的类型为零。
typcollation oid pg_collation.oid 指定类型的排序规则。 如果类型不支持排序规则,则为零。 对于支持排序规则的基本类型,该值为DEFAULT_COLLATION_OID。 如果为域指定了一个域,则通过可折叠类型的域可以具有一些其他排序规则OID。
typdefaultbin pg_node_tree   如果不为null,则为该类型的默认表达式的nodeToString()表示。 这仅用于域。
typdefault text   如果类型没有关联的默认值,则为null。 如果typdefaultbin不为null,则typdefault必须包含由typdefaultbin表示的默认表达式的人类可读版本。 如果typdefaultbin为null且typdefault不为null,则typdefault是类型默认值的外部表示,可以将其输入到类型的输入转换器以生成常量。
typacl aclitem[]   访问权限; 有关详细信息, 请参阅GRANTREVOKE

下表列出了typcategory的系统定义值。 此列表的任何未来添加项也将是大写ASCII字母。 所有其他ASCII字符都保留给用户定义的类别。

Table 2. typcategory Codes
代码 种类
A 数组类型
B 布尔类型
C 复合类型
D 日期/时间类型
E 枚举类型
G 几号类型
I 网络地址类型
N 数字类型
P 伪类型
R 范围类型
S 字符串类型
T 时间跨度类型
U 用户自定义类型
V 位串类型
X 未知类型