受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

51.7. pg_attribute #

目录pg_attribute存储关于表列的信息。数据库中每个表的每一列,在pg_attribute中都恰好有一行。 (其中也包括索引的属性项,实际上,凡是在pg_class中有项的对象,都有对应的属性项。)

术语属性等同于列,这里使用它只是出于历史原因。

Table 51.7. pg_attribute

列类型

描述

attrelid oid (引用 pg_class.oid

此列所属的表

attname name

列名称

atttypid oid (引用 pg_type.oid

此列的数据类型(删除的列为零)

attlen int2

该列数据类型的pg_type.typlen副本

attnum int2

列的编号。一般列从1开始向上编号。系统列,如ctid,则拥有(任意)负值编号。

attcacheoff int4

在存储中始终为 -1,但装入内存中的行描述符时,可能会更新为该属性在行内偏移量的缓存值

atttypmod int4

atttypmod记录了在表创建时提供的类型相关数据(例如一个varchar列的最大长度)。 它会被传递给类型相关的输入函数和长度强制函数。对于那些不需要atttypmod的类型,这个值通常总是为-1。

attndims int2

如果该列是数组类型,则为维数;否则为 0。 (目前并不会强制检查数组维数,因此任何非零值实际上都只意味着这是一个数组。)

attbyval bool

该列类型的pg_type.typbyval的一个拷贝

attalign char

该列类型的 pg_type.typalign 的一个拷贝

attstorage char

通常是该列类型的pg_type.typstorage的一个拷贝。 对于可TOAST的数据类型,这可以在列创建后被修改以控制存储策略。

attcompression char

该列当前的压缩方法。 通常为'\0',表示使用当前默认设置(见 default_toast_compression)。 否则,'p' 选择 pglz 压缩,而'l' 选择 LZ4 压缩。 但是,当attstorage不允许压缩时,该字段会被忽略。

attnotnull bool

这代表一个非空约束

atthasdef bool

该列有一个默认表达式或生成的表达式,在此情况下在pg_attrdef目录中会有一个对应项来真正定义该表达式。 (检查attgenerated以确定是默认还是生成的表达式。)

atthasmissing bool

该列在行中完全缺失时会用到这个列的值,如果在行创建之后增加一个有非易失DEFAULT值的列,就会发生这种情况。 实际使用的值被存放在attmissingval列中。

attidentity char

如果是一个零字节(''),则不是一个标识列。 否则,a = 总是生成,d = 默认生成。

attgenerated char

如果是零字节(''),则不是生成列。 否则,s = 存储式。(将来可能会添加其他值。)

attisdropped bool

该列被删除且不再有效。一个删除的列仍然物理存在于表中,但是会被分析器忽略并因此无法通过SQL访问。

attislocal bool

该列是由关系本地定义的。注意一个列可以同时是本地定义和继承的。

attinhcount int2

该列直接祖先的数量。祖先数量非零的列不能被删除,也不能被重命名。

attcollation oid (引用 pg_collation.oid

该列被定义的排序规则,如果该列不是一个可排序数据类型则为0。

attstattarget int2

attstattarget 控制 ANALYZE 为该列收集统计信息时的细节级别。 零值表示不应收集统计信息。 空值表示使用系统默认统计目标。 正值的确切含义依赖于数据类型。 对于标量数据类型,attstattarget 既是要收集的最常见值目标个数,也是要创建的直方图桶目标个数。

attacl aclitem[]

列级访问权限, 如果此列上已有特别授予的权限

attoptions text[]

属性级选项,以keyword=value形式的字符串

attfdwoptions text[]

属性级的外部数据包装器选项,以keyword=value形式的字符串

attmissingval anyarray

这个列中是一个含有一个元素的数组,其中的值被用于该列在行中完全缺失时,如果在行创建之后增加一个有非易失DEFAULT值的列,就会发生这种情况。 只有当atthasmissing为真时才使用这个值。如果没有值则该列为空。


在一个被删除的列的pg_attribute的项中,atttypid被重置为0,但attlen以及其他从pg_type拷贝的域仍然有效。 这种安排用于处理一种情况,即被删除列的数据类型后来被删除,并且因此不再有相应的pg_type行。 attlen和其他域可以被用来解释表的一行的内容。

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。