pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
pg_type #目录 pg_type 存储有关数据类型的信息。基础类型和枚举类型(标量类型)使用 CREATE TYPE 创建,而域使用 CREATE DOMAIN 创建。数据库中的每一个表都会有一个自动创建的复合类型,用于表示表的行结构。也可以使用 CREATE TYPE AS 创建复合类型。
表 51.62. pg_type 列
| 名称 | 类型 | 引用 | 描述 |
|---|---|---|---|
oid |
oid |
行标识符(隐藏属性,必须显式选择) | |
typname |
name |
数据类型的名字 | |
typnamespace |
oid |
|
包含此类型的名字空间的 OID |
typowner |
oid |
|
类型的拥有者 |
typlen |
int2 |
对于一个固定尺寸的类型,typlen 是该类型内部表示的字节数。对于一个变长类型,typlen 为负值。-1 表示一个“varlena”类型(具有长度字),-2 表示一个以空字符结尾的 C 字符串。 |
|
typbyval |
bool |
typbyval 判断内部例程传递这个类型的值时是通过传值还是传引用。如果 typlen 不是 1、2 或 4(或者在 Datum 为 8 字节的机器上为 8),则 typbyval 最好是假。变长类型总是传引用。注意即使长度允许传值,typbyval 也可以为假。 |
|
typtype |
char |
typtype 可以是:b 表示一个基础类型,c 表示一个复合类型(例如一个表的行类型),d 表示一个域,e 表示一个枚举类型,p 表示一个伪类型,r 表示一个范围类型。另请参阅 typrelid 和 typbasetype。 |
|
typcategory |
char |
typcategory 是一种任意的数据类型分类,它被解析器用来决定应“首选”哪些隐式类型转换。参见表 51.63。 |
|
typispreferred |
bool |
如果此类型在它的 typcategory 中是首选的类型转换目标,此列为真 |
|
typisdefined |
bool |
如果此类型已被定义则为真,如果此类型只是一个表示还未定义类型的占位符则为假。当 typisdefined 为假,除了类型名字、名字空间和 OID 之外什么都不能被依赖。 |
|
typdelim |
char |
在分析数组输入时,分隔两个此类型值的字符。注意该分隔符是与数组元素数据类型相关联的,而不是和数组的数据类型关联。 | |
typrelid |
oid |
|
如果这是一个复合类型(见 typtype),那么此列指向 pg_class 中定义对应表的项(对于独立定义的复合类型,pg_class 项并不表示一个表,但不管怎样该类型的 pg_attribute 项需要链接到它)。对非复合类型此列为零。 |
typelem |
oid |
|
如果 typelem 不为 0,则它标识 pg_type 中的另一行。此时可以像数组一样对当前类型使用下标,得到 typelem 类型的值。“真正的”数组类型是变长的(typlen = -1),但某些定长类型(typlen > 0)的 typelem 也非零,例如 name 和 point。如果定长类型具有 typelem,则其内部表示必须是若干个 typelem 数据类型的值,不含其他数据。变长数组类型的首部由数组子例程定义。 |
typarray |
oid |
|
如果 typarray 不是零,则它标识 pg_type 中的另一行,这一行是一个将此类型作为元素的“真正的”数组类型 |
typinput |
regproc |
|
输入转换函数(文本格式) |
typoutput |
regproc |
|
输出转换函数(文本格式) |
typreceive |
regproc |
|
输入转换函数(二进制格式),如果没有则为零 |
typsend |
regproc |
|
输出转换函数(二进制格式),如果没有则为零 |
typmodin |
regproc |
|
类型修饰符输入函数,如果类型不支持修饰符则为零 |
typmodout |
regproc |
|
类型修饰符输出函数,或为零以使用标准格式 |
typanalyze |
regproc |
|
自定义 ANALYZE 函数,零表示使用标准函数 |
typalign |
char |
可能的值为:
注意对于系统表中使用的类型,关键的是在 |
|
typstorage |
char |
注意, |
|
typnotnull |
bool |
|
|
typbasetype |
oid |
|
如果这是一个域(见 |
typtypmod |
int4 |
域使用 |
|
typndims |
int4 |
对于基于数组的域, |
|
typcollation |
oid |
|
|
typdefaultbin |
pg_node_tree |
如果 |
|
typdefault |
text |
如果某类型没有相关默认值,那么 |
|
typacl |
aclitem[] |
访问权限,详见 GRANT 和 REVOKE |
表 51.63 列出了 typcategory 的系统定义值。任何未来对此列表的增加都将是大写 ASCII 字母。所有其他 ASCII 字符都保留给用户定义的类别。
表 51.63. typcategory 代码
| 代码 | 类别 |
|---|---|
A |
数组类型 |
B |
布尔类型 |
C |
复合类型 |
D |
日期/时间类型 |
E |
枚举类型 |
G |
几何类型 |
I |
网络地址类型 |
N |
数值类型 |
P |
伪类型 |
R |
范围类型 |
S |
字符串类型 |
T |
时间间隔类型 |
U |
用户定义类型 |
V |
位字符串类型 |
X |
unknown 类型 |
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。