2024 年 9 月 26 日:PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本: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

51.7. pg_attribute #

目录 pg_attribute 存储关于表列的信息。数据库中每个表的每一列都将对应于 pg_attribute 中的一行。 (索引以及所有具有 pg_class 条目的对象也将有属性条目。)

术语属性等同于列,出于历史原因而使用。

表 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)

列的定义排序规则,如果列不是可排序规则的数据类型,则为零

attstattarget int2

attstattarget 控制 ANALYZE 为此列累积的统计信息的详细程度。零值表示不应收集任何统计信息。空值表示使用系统默认统计信息目标。正值的精确含义取决于数据类型。对于标量数据类型,attstattarget 既是收集的 最常见值 的目标数量,也是创建的直方图箱的目标数量。

attacl aclitem[]

列级访问权限 (如果有的话) 已专门授予此列

attoptions text[]

属性级选项,以 关键字=值 字符串形式

attfdwoptions text[]

属性级外部数据包装器选项,以 关键字=值 字符串形式

attmissingval anyarray

此列具有一个包含一个元素的数组,该元素包含在列完全缺少于行时使用的值,例如在创建行后添加具有非易失性 DEFAULT 值的列时。仅当 atthasmissing 为 true 时才使用该值。如果没有值,则该列为 null。


在已删除列的 pg_attribute 条目中,atttypid 重置为零,但从 pg_type 复制的 attlen 和其他字段仍然有效。此安排需要处理已删除列的数据类型后来被删除的情况,因此不再有 pg_type 行。可以使用 attlen 和其他字段来解释表行中的内容。

提交更正

如果您在文档中看到任何不正确的内容、与您对特定功能的体验不符或需要进一步澄清,请使用 此表格 报告文档问题。