51.7. pg_attribute

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

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

表 51.7. pg_attribute

NameTypeReferencesDescription
attrelidoidpg_class.oid该列所属的表
attnamename 列名
atttypidoidpg_type.oid该列的数据类型
attstattargetint4 attstattarget控制ANALYZE为该列累积的统计信息的详细程度。零值表示不应收集统计信息。负值表示使用系统默认统计信息目标。正值的确切含义取决于数据类型。对于标量数据类型,attstattarget既是要收集的“最常见值”的目标数,也是要创建的直方图 bin 的目标数。
attlenint2 此列类型的pg_type.typlen的副本
attnumint2 列号。普通列从 1 开始编号。系统列(例如oid)具有(任意)负数。
attndimsint4 维数(如果列为数组类型);否则为 0.(当前,不强制执行数组的维数,因此任何非零值实际上表示“它是数组”.)
attcacheoffint4 在存储中始终为-1,但是当加载到内存中的行 Descriptors 时,可能会对其进行更新以缓存该行中属性的偏移量
atttypmodint4 atttypmod记录在表创建时提供的特定于类型的数据(例如varchar列的最大长度)。它传递给特定于类型的 Importing 函数和长度强制函数。对于不需要atttypmod的类型,该值通常为-1.
attbyvalbool 此列类型的pg_type.typbyval的副本
attstoragechar 通常,此列类型的pg_type.typstorage的副本。对于可 TOAST 的数据类型,可以在创建列之后更改此设置以控制存储策略。
attalignchar 此列类型的pg_type.typalign的副本
attnotnullbool 这表示非空约束。
atthasdefbool 此列具有默认值,在这种情况下,pg_attrdef目录中将存在一个实际定义该值的对应条目。
attidentitychar 如果为零字节(''),则不是标识列。否则,a =始终生成,d =默认生成。
attisdroppedbool 该列已被删除,不再有效。删除的列实际上仍然存在于表中,但是解析器将忽略它,因此无法通过 SQL 对其进行访问。
attislocalbool 此列在关系中本地定义。请注意,可以在本地定义列并同时继承列。
attinhcountint4 此列具有的直接祖先数。祖先数不为零的列不能删除或重命名。
attcollationoidpg_collation.oid列的已定义排序规则;如果列不是可排序数据类型,则为零。
attaclaclitem[] 列级访问特权(如果已在此列上专门授予了任何特权)
attoptionstext[] 属性级别选项,作为“关键字=值”字符串
attfdwoptionstext[] 属性级别的外部数据包装器选项,如“ keyword = value”字符串

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