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

52.7. pg_attribute #

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

属性(attribute)一词等同于列(column),是出于历史原因而使用的。

表 52.7. pg_attribute

列 类型

描述

attrelid oid (引用 pg_class.oid)

该列所属的表

attname name

列名

atttypid oid (引用 pg_type.oid)

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

attlen int2

该列类型的 pg_type.typlen 的副本

attnum int2

列的编号。普通列从 1 开始编号。系统列,例如 ctid,有(任意的)负数。

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 = 存储,v = 虚拟。存储的生成列像普通列一样被物理存储。虚拟生成列被物理存储为 null 值,实际值在运行时计算。

attisdropped bool

此列已被删除,不再有效。已删除的列仍然物理存在于表中,但会被解析器忽略,因此无法通过 SQL 访问。

attislocal bool

此列在关系中是本地定义的。请注意,一列可以同时是本地定义和继承的。

attinhcount int2

此列的直接祖先数量。具有非零祖先数量的列不能被删除或重命名。

attcollation oid (引用 pg_collation.oid)

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

attstattarget int2

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

attacl aclitem[]

列级别的访问权限,如果已授予任何特定于此列的权限

attoptions text[]

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

attfdwoptions text[]

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

attmissingval anyarray

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


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

提交更正

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