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

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

百科 / 数据类型 / 字符串

pg_mcv_list

多变量最常见值列表

当前查看 PostgreSQL 18.6。

PG10–20 核心源码清单。类型转换与操作符类列出源码显式声明的关系;缺少记录不能排除通过其他机制进行转换或使用索引。

定义

多变量最常见值列表

pg_mcv_list
目录名称
pg_catalog.pg_mcv_list
类型 OID
5017
类型种类
基础类型
声明长度
变长(varlena)
存储策略
扩展
输入函数
pg_mcv_list_in
输出函数
pg_mcv_list_out

中文手册

阅读完整手册章节

阅读来源定义

52.64. pg_type

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

表 52.64. pg_type 列

列类型

描述

oid oid

行标识符

typname name

数据类型的名字

typnamespace oid(引用 pg_namespace.oid)

包含此类型的名字空间的OID

typowner oid(引用 pg_authid.oid)

类型的拥有者

typlen int2

对于定长类型,typlen 是该类型内部表示所占的字节数。对于变长类型,typlen 为负数。-1 表示“varlena”类型(包含长度字的类型),-2 表示以空字符结尾的 C 字符串。

typbyval bool

typbyval 决定内部例程是按值还是按引用传递此类型的值。如果 typlen 不是 1、2 或 4(在 Datum 为 8 字节的机器上还包括 8),typbyval 应当为 false。变长类型始终按引用传递。注意,即使长度允许按值传递,typbyval 也可以为 false。

typtype char

typtype可以是:b表示一个基础类型,c表示一个复合类型(例如一个表的行类型),d表示一个域,e表示一个枚举类型,p表示一个伪类型,r表示一个范围类型,或 m表示一个多范围类型。另请参阅typrelid和typbasetype。

typcategory char

typcategory是一种任意的数据类型分类,它被解析器用来决定应“首选”哪些隐式类型转换。参见表 52.65。

typispreferred bool

如果此类型在它的typcategory中是首选的类型转换目标,此列为真

typisdefined bool

如果此类型已被定义则为真,如果此类型只是一个表示还未定义类型的占位符则为假。当typisdefined为假,除了类型名字、名字空间和OID之外什么都不能被依赖。

typdelim char

在分析数组输入时,分隔两个此类型值的字符。注意该分隔符是与数组元素数据类型相关联的,而不是和数组的数据类型关联。

typrelid oid(引用 pg_class.oid)

如果这是一个复合类型(见typtype),那么此列指向pg_class中定义对应表的项(对于独立定义的复合类型,pg_class项并不表示一个表,但不管怎样该类型的pg_attribute项需要链接到它)。对非复合类型此列为零。

typsubscript regproc(引用 pg_proc.oid)

下标处理函数的 OID,如果该类型不支持下标则为零。“真正的”数组类型的 typsubscript = array_subscript_handler,但其他类型也可能使用不同的处理函数来实现特定的下标行为。

typelem oid(引用 pg_type.oid)

如果typelem不为零,则它标识pg_type中的另一行,该行定义了下标操作产生的类型。如果typsubscript为零则该项为零。但是,当typsubscript不为零时它也可以为零,如果处理函数不需要typelem来决定下标结果类型。注意typelem依赖被视为意味着该类型在物理上包含其元素类型;所以这个元素类型上的DDL变更可能会受到该类型存在的限制。

typarray oid(引用 pg_type.oid)

如果typarray不是零,则它标识pg_type中的另一行,这一行是一个将此类型作为元素的“真正的”数组类型

typinput regproc(引用 pg_proc.oid)

输入转换函数(文本格式)

typoutput regproc(引用 pg_proc.oid)

输出转换函数(文本格式)

typreceive regproc(引用 pg_proc.oid)

输入转换函数(二进制格式),如果没有则为零

typsend regproc(引用 pg_proc.oid)

输出转换函数(二进制格式),如果没有则为零

typmodin regproc(引用 pg_proc.oid)

类型修饰符输入函数,如果类型不支持修饰符则为零

typmodout regproc(引用 pg_proc.oid)

类型修饰符输出函数,或为零以使用标准格式

typanalyze regproc(引用 pg_proc.oid)

自定义ANALYZE函数,零表示使用标准函数

typalign char

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

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

  • s = 按 short 对齐(大多数机器上为 2 字节)。
  • i = 按 int 对齐(大多数机器上为 4 字节)。
  • d = 按 double 对齐(许多机器上为 8 字节,但并非所有机器都是如此)。

typstorage char

对于 varlena 类型(typlen = -1 的类型),typstorage 指明该类型是否支持 TOAST,以及此类型属性的默认存储策略。可能的值为:

  • p(普通):值必须始终以普通方式存储(非 varlena 类型总是使用这个值)。

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

  • m(主要):值可以压缩后存储在行内。

  • x(扩展):值可以被压缩和/或移动到二级关系。

x 是支持 TOAST 的类型的常见选择。注意,m值也可以移到二级存储,但只能作为最后手段(e和x值会先被移动)。

typnotnull bool

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

typbasetype oid(引用 pg_type.oid)

如果这是一个域(参见 typtype),typbasetype 就标识其基础类型。如果该类型不是域,则为零。

typtypmod int4

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

typndims int4

对于基于数组的域,typndims是数组维度数(即,typbasetype是一个数组类型)。对于不是基于数组的域的类型,此列为零。

typcollation oid(引用 pg_collation.oid)

typcollation指定此类型的排序规则。如果类型不支持排序规则,此列为零。支持排序规则的基础类型在这里会有一个非零值,典型值为DEFAULT_COLLATION_OID。基于支持排序规则的类型的域,如果为其指定了排序规则 OID,则它的排序规则 OID 可以不同于其基础类型的排序规则 OID。

typdefaultbin pg_node_tree

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

typdefault text

如果某类型没有相关默认值,那么typdefault为 NULL。如果typdefaultbin不为 NULL,那么typdefault必须包含由typdefaultbin表示的默认表达式的人类可读版本。如果typdefaultbin为 NULL而typdefault不为 NULL,则typdefault是该类型默认值的外部表示形式,它可以被交给该类型的输入转换器来产生一个常量。

typacl aclitem[]

访问权限,另请参阅第 5.8 节


注意

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

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

表 52.65. typcategory 代码

代码 类别
A 数组类型
B 布尔类型
C 复合类型
D 日期/时间类型
E 枚举类型
G 几何类型
I 网络地址类型
N 数值类型
P 伪类型
R 范围类型
S 字符串类型
T 时间间隔类型
U 用户定义类型
V 位字符串类型
X unknown 类型
Z 内部使用类型

系统目录属性

此构建的源码初始化值。字段含义参见 pg_type 。包含头文件默认值;依赖构建的常量保留符号形式,不作为服务器运行时实测。

oid
5017
descr
multivariate MCV list
typacl
_null_
typlen
-1
typelem
0
typname
pg_mcv_list
typsend
pg_mcv_list_send
typtype
b
typalign
i
typarray
0
typbyval
f
typdelim
','
typinput
pg_mcv_list_in
typmodin
-
typndims
0
typowner
POSTGRES
typrelid
0
typmodout
-
typoutput
pg_mcv_list_out
typtypmod
-1
typanalyze
-
typdefault
_null_
typnotnull
f
typreceive
pg_mcv_list_recv
typstorage
x
typbasetype
0
typcategory
Z
typcollation
default
typisdefined
t
typnamespace
pg_catalog
typsubscript
-
typdefaultbin
_null_
array_type_oid
0
typispreferred
f
array_type_name

类型转换 2

与此类型相关的显式 pg_cast 记录。PostgreSQL 还支持 pg_cast 之外的类型转换,缺少记录不能证明转换不可能。

源类型目标类型转换上下文转换方式函数
pg_mcv_listbytea隐式二进制兼容0
pg_mcv_listtext隐式输入/输出0

版本比较

PostgreSQL 17.11 → 18.6。属性比较不包含构建标识和说明正文;原始目录字段与源描述保留原文。

这两个样本的系统目录和结构化属性没有变化。

这些构建的文档也有差异,请查看对应版本的手册定义。

文档与源码

构建
18.6 · https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2
指纹
555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f

相关条目

全部数据类型 · 下载此版本 JSON · 最早收录的样本不代表该类型的实际引入版本。