Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

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 时使用。如果没有值,该列为空。


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