pg_type

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

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

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

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

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

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

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

p: 值必须明文存储。

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

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

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

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

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

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

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

Parent topic: 系统目录定义