Postgresql 中文操作指南

53.7. pg_attribute #

目录 pg_attribute 存储有关表列的信息。数据库中每个表中的每列都将精确地对应一行 pg_attribute 。索引也会有属性条目,实际上,所有有 pg_class 条目的对象也都会有属性条目。

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

Table 53.7. pg_attribute Columns

Column Type

Description

attrelid oid (引用 pg_class . oid )此列所属的表

attname name

The column 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 此列具有直接祖先的数量。祖先数量非零的列不可删除,也不可重命名。

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

attcollation oid (引用 pg_collation . oid )列的已定义排序规则,如果列不是固定排序数据类型,则为零

attacl aclitem[] 列级别访问权限(如果有已在此列上明确授予)

attoptions text[] 属性级别选项,格式为“关键字=值”字符串

attfdwoptions text[] 属性级别外部数据封装器选项,格式为“关键字=值”字符串

attmissingval anyarray 此列有一个一维数组,其中包含用于列从行中全部缺失时使用值,例如当将一列添加到一个非空 DEFAULT 值中,在行创建后。仅当 atthasmissing 为 true 时才会使用该值。如果没有值,则该列为 null。

在已删除列的 pg_attribute 条目中, atttypid 重置为 0,但 attlen 和从 pg_type 复制的其他字段仍然有效。需要此种区分,才能应对已删除列的数据类型后来已删除(因此不再存在 pg_type 行)的情况。 attlen 和其他字段可用于解释表的行的内容。