pg_attribute

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 48. 系统表 | 下一页

# 48.7. `pg_attribute`

`pg_attribute`表存储关于表的字段的信息。数据库里每个表的每个字段都在 `pg_attribute`里有一行。还有用于索引，以及所有在 `pg_class`里有记录的对象。

术语属性等效于列/字段，使用它是历史原因。

表 48-7. `pg_attribute` 字段

名字 | 类型 | 引用 | 描述
--- | --- | --- | ---
`attrelid` | `oid` | ``pg_class`.oid` | 此字段所属的表
`attname` | `name` |  | 字段名字
`atttypid` | `oid` | ``pg_type`.oid` | 这个字段的数据类型
`attstattarget` | `int4` |  | 控制ANALYZE为这个字段积累的统计细节的级别。零值表示不收集统计信息。 负数表示使用系统缺省的统计对象。正数值的确切信息是和数据类型相关的。对于标量数据类型， `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`和其它字段可以用于解析表中一行内容。

上一页 | 起始页 | 下一页
`pg_attrdef` | 上一级 | `pg_authid`