↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
历史版本。 PostgreSQL 7.4 已结束支持。 请参阅 当前版本手册.

43.29. pg_type #

目录 pg_type 存储关于数据类型的信息。基本类型(标量类型)用 CREATE TYPE 创建。数据库中的每个表都会自动创建一个复合类型,以表示该表的行结构。也可以用 CREATE TYPE AS 显式创建复合类型。(还可以用 CREATE DOMAIN 在现有类型之上创建域。)

表 43.29. pg_type 列

名称类型引用描述
typnamename  数据类型的名字
typnamespaceoidpg_namespace.oid 包含此类型的名字空间的OID
typownerint4pg_shadow.usesysid 类型的拥有者
typlenint2  对于一个固定尺寸的类型,typlen是该类型内部表示的字节数。对于一个变长类型,typlen为负值。-1表示一个“varlena”类型(具有长度字),-2表示一个以空值结尾的C字符串。
typbyvalbool typbyval 决定内部例程按值还是按引用传递该类型的值。如果 typlen 不是 1、2 或 4(或在 Datum 为 8 字节的机器上不是 8),typbyval 最好为假。变长类型总是按引用传递。注意,即使长度允许按值传递,typbyval 也可以为假;例如 float4 类型目前就是这样。
typtypechar typtype 为 b 表示基本类型,c 表示复合类型(即表的行类型),d 表示域,p 表示伪类型。另见 typrelid 和 typbasetype。
typisdefinedbool  如果此类型已被定义则为真,如果此类型只是一个表示还未定义类型的占位符则为假。当typisdefined为假,除了类型名字、名字空间和OID之外什么都不能被依赖。
typdelimchar  在分析数组输入时,分隔两个此类型值的字符。注意该分隔符是与数组元素数据类型相关联的,而不是和数组的数据类型关联。
typrelidoidpg_class.oid如果这是复合类型(见 typtype),此列指向定义相应表的 pg_class 项。(对于独立的复合类型,该 pg_class 项并不真正代表一个表,但类型的 pg_attribute 项需要链接到它。)基本类型为零。
typelemoidpg_type.oid如果 typelem 不为 0,它就标识 pg_type 中的另一行。当前类型于是可以像数组那样带下标,产生 typelem 类型的值。“真正的”数组类型是变长的(typlen = -1),但某些定长(typlen > 0)类型也有非零的 typelem,例如 name 和 oidvector。如果定长类型有 typelem,其内部表示必须是若干个 typelem 数据类型的值,不含其他数据。变长数组类型有一个由数组子例程定义的头部。
typinputregprocpg_proc.oid 输入转换函数(文本格式)
typoutputregprocpg_proc.oid 输出转换函数(文本格式)
typreceiveregprocpg_proc.oid 输入转换函数(二进制格式),如果没有则为零
typsendregprocpg_proc.oid 输出转换函数(二进制格式),如果没有则为零
typalignchar 

typalign表示存储此类型值时所要求的对齐方式。它适用于磁盘存储,以及该值在 PostgreSQL 内部的大多数表示形式。当多个值连续存放时,例如在磁盘上完整行的表示中,这种类型的数据前会插入填充,使其从指定边界开始。对齐参考点是该序列中第一个数据的起始位置。

可能的值为:

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

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

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

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

注意

对于系统表中使用的类型,关键的是在pg_type定义的大小和对齐与编译器在表示表行的结构体中布局列的方式一致。

typstoragechar 

typstorage用于指示 varlena 类型(即typlen = -1)是否支持 TOAST,以及这种类型的属性应采用什么默认策略。可能的值为:

  • p:值必须始终以普通方式存储。

  • e:值可以存储在一个“二级”关系中(如果关系有这样的关系,参见pg_class.reltoastrelid)。

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

  • x:值可以被压缩并内联存储,或存储在“二级”存储中。

注意,m列也可以被移动到二级存储,但只能作为最后手段(e和x列会先被移动)。

typnotnullbool 

typnotnull表示类型上的一个非空约束。只用于域。

typbasetypeoidpg_type.oid

如果这是域(见 typtype),typbasetype 标识该域所基于的类型。不是域则为零。

typtypmodint4 

域使用typtypmod来记录被应用于它们基础类型的typmod(如果基础类型不使用typmod,则为-1)。如果此类型不是一个域则为-1。

typndimsint4 

typndims 是作为数组的域的数组维数(即 typbasetype 是数组类型;该域的 typelem 将与基本类型的 typelem 一致)。非数组域之外的其他类型为零。

typdefaultbintext 

如果typdefaultbin非空,那么它就是该类型默认表达式的nodeToString()表示形式。此列只用于域。

typdefaulttext 

typdefault 为空表示该类型没有关联的默认值。如果 typdefaultbin 非空,typdefault 必须包含 typdefaultbin 所表示的默认表达式的人类可读版本。如果 typdefaultbin 为空而 typdefault 非空,则 typdefault 是该类型默认值的外部表示,可以交给该类型的输入转换器以产生一个常量。


报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.