ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 47.7\. `pg_attribute` `pg_attribute`表存储关于表的字段的信息。数据库里每个表的每个字段都在 `pg_attribute`里有一行。还有用于索引,以及所有在 `pg_class`里有记录的对象。 术语属性等效于列/字段,使用它是历史原因。 **Table 47-7\. `pg_attribute` 字段** | 名字 | 类型 | 引用 | 描述 | | --- | --- | --- | --- | | `attrelid` | `oid` | `pg_class`.oid | 此字段所属的表 | | `attname` | `name` | 字段名字 | | `atttypid` | `oid` | `pg_type`.oid | 这个字段的数据类型 | | `attstattarget` | `int4` | 控制[ANALYZE](#calibre_link-589)为这个字段积累的统计细节的级别。零值表示不收集统计信息。 负数表示使用系统缺省的统计对象。正数值的确切信息是和数据类型相关的。对于标量数据类型, `attstattarget`既是要收集的"最常用数值" 的目标数目,也是要创建的柱状图的目标数量。 | | `attlen` | `int2` | 是本字段类型的`pg_type.typlen`的拷贝 | | `attnum` | `int2` | 字段数目。普通字段是从 1 开始计数的。系统字段 (比如`oid`)有(任意)负数。 | | `attndims` | `int4` | 如果该字段是数组,那么是维数,否则是 0 。目前,一个数组的维数并未强制, 因此任何非零值都表示"这是一个数组"。 | | `attcacheoff` | `int4` | 在磁盘上的时候总是 -1 ,但是如果加载入内存中的行描述器中, 它可能会被更新以缓冲在行中字段的偏移量。 | | `atttypmod` | `int4` | 记录创建新表时支持的类型特定的数据(比如一个`varchar`字段的最大长度)。 它传递给类型相关的输入函数和长度转换函数当做第三个参数。 其值对那些不需要`atttypmod`的类型通常为 -1 。 | | `attbyval` | `bool` | 这个字段类型的`pg_type.typbyval`的拷贝。 | | `attstorage` | `char` | 这个字段的类型的`pg_type.typstorage`的拷贝。对于可压缩的数据类型(TOAST), 这个字段可以在字段创建之后改变,以便于控制存储策略。 | | `attalign` | `char` | 这个字段类型的`pg_type.typalign`的拷贝 | | `attnotnull` | `bool` | 这代表一个非空约束。可以改变这个字段以打开或者关闭这个约束。 | | `atthasdef` | `bool` | 这个字段有一个缺省值,此时它对应`pg_attrdef` 表里实际定义此值的记录。 | | `attisdropped` | `bool` | 这个字段已经被删除了,不再有效。一个已经删除的字段物理上仍然存在表中, 但会被分析器忽略,因此不能再通过 SQL 访问。 | | `attislocal` | `bool` | 这个字段是局部定义在关系中的。请注意一个字段可以同时是局部定义和继承的。 | | `attinhcount` | `int4` | 这个字段所拥有的直接祖先的个数。如果一个字段的祖先个数非零, 那么它就不能被删除或重命名。 | | `attcollation` | `oid` | `pg_collation`.oid | 这个字段定义的排序规则,如果这个字段不是排序规则数据类型则为0。 | | `attacl` | `aclitem[]` | 如果在这个字段上明确的获得任意,则为字段级访问权限。 | | `attoptions` | `text[]` | 属性级选项,使用"keyword=value"格式的字符串 | | `attfdwoptions` | `text[]` | 属性级外部数据封装器选项,使用"keyword=value"格式的字符串 | 在一个已被删除字段的`pg_attribute`记录里, `atttypid`将被重置为零,但是`attlen` 和其它从`pg_type`拷贝的仍然有效。 这么安排是为了对付后来被删除的字段的数据类型也被删除的情况,因为这个时候不再有 `pg_type`行了。`attlen`和其它字段可以用于解析表中一行内容。