支持的版本:当前 (17) / 16 / 15 / 14 / 13
开发版本:开发版
不支持的版本: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

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 将重置为零,但 attlen 和从 pg_type 复制的其他字段仍然有效。需要这种安排来处理删除的列的数据类型稍后被删除的情况,因此不再有 pg_type 行。attlen 和其他字段可用于解释表行的内容。

提交更正

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