↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 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.3 已于 2007 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

3.29. pg_type #

该目录存储关于数据类型的信息。标量类型(“基本类型”)用 CREATE TYPE 创建。数据库中的每个表都会自动创建一个复杂类型,以表示该表的行结构。还可以用 CREATE TYPE AS 创建复杂类型,用 CREATE DOMAIN 创建派生类型。

表 3.29. pg_type 列

名称 类型 引用 描述
typname name   数据类型的名字
typnamespace oid pg_namespace.oid 包含此类型的名字空间的OID
typowner int4 pg_shadow.usesysid 类型的所有者(创建者)
typlen int2   对于一个固定尺寸的类型,typlen是该类型内部表示的字节数。 对于一个变长类型,typlen为负值。 -1表示一个“varlena”类型(具有长度字),-2表示一个以空值结尾的C字符串。
typbyval bool   typbyval 决定内部例程按值还是按引用传递该类型的值。只有等价于 char、short 和 int 的项可以按值传递,因此如果类型长度不是 1、2 或 4 字节,PostgreSQL 就没有按值传递的选项,因此 typbyval 最好为假。变长类型总是按引用传递。注意,即使长度允许按值传递,typbyval 也可以为假;例如 float4 类型目前就是这样。
typtype char   typtype 为 b 表示基本类型,c 表示复杂类型(即表的行类型),d 表示派生类型(即域),p 表示伪类型。另见 typrelid 和 typbasetype。
typisdefined bool   如果此类型已被定义则为真,如果此类型只是一个表示还未定义类型的占位符则为假。 当 typisdefined 为假,除了类型名字、名字空间和OID之外什么都不能被依赖。
typdelim char   在分析数组输入时,分隔两个此类型值的字符。注意该分隔符是与数组元素数据类型相关联的,而不是和数组的数据类型关联。
typrelid oid pg_class.oid 如果这是复杂类型(见 typtype),此字段指向定义相应表的 pg_class 项。(对于独立的复合类型,该 pg_class 项并不真正代表一个表,但类型的 pg_attribute 项需要链接到它。)非复杂类型为零。
typelem oid pg_type.oid 如果 typelem 不为 0,它就标识 pg_type 中的另一行。当前类型于是可以像数组那样带下标,产生 typelem 类型的值。“真正的”数组类型是变长的(typlen = -1),但某些定长(typlen > 0)类型也有非零的 typelem,例如 name 和 oidvector。如果定长类型有 typelem,其内部表示必须是 N 个 typelem 数据类型的值,不含其他数据。变长数组类型有一个由数组子例程定义的头部。
typinput regproc pg_proc.oid 输入转换函数
typoutput regproc pg_proc.oid 输出转换函数
typalign char  

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

可能的取值有:

  • 'c' = CHAR 对齐,即不需要对齐。

  • 's' = SHORT 对齐(在大多数机器上为 2 字节)。

  • 'i' = INT 对齐(在大多数机器上为 4 字节)。

  • 'd' = DOUBLE 对齐(在很多机器上为 8 字节,但绝不是所有机器)。

注意

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

typstorage char  

typstorage 告诉我们对于 varlena 类型(即 typlen = -1 的类型),该类型是否为 TOAST 做了准备,以及该类型属性的默认策略应当是什么。可能的取值为

  • 'p':值必须总是以原样(plain)存储。

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

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

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

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

typnotnull bool  

typnotnull 表示类型上的一个 NOT NULL 约束。目前只用于域。

typbasetype oid pg_type.oid

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

typtypmod int4  

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

typndims int4  

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

typdefaultbin text  

如果 typdefaultbin 非 NULL,它就是该类型默认表达式的 nodeToString 表示。目前这只用于域。

typdefault text  

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


提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。