pg_attribute
目录pg_attribute存储关于表列的信息。数据库中每个表的每一列,在pg_attribute中都恰好有一行。(其中也包括索引的属性项,实际上,凡是在pg_class中有项的对象,都有对应的属性项。) 术语属性等同于列,这里使用它只是出于历史原因。
英文手册覆盖始于 PostgreSQL 7.4. 来源历史与运行验证各自保留独立版本边界。
当前阅读 PG 18·选择有来源记录的版本
- kind
- catalog
- lang
- en
- measured attributes
- true
- metadata release
- 18.6
- runtime verified
- false
- source
- english-manual
版本定义 PG 18
目录pg_attribute存储关于表列的信息。数据库中每个表的每一列,在pg_attribute中都恰好有一行。(其中也包括索引的属性项,实际上,凡是在pg_class中有项的对象,都有对应的属性项。) 术语属性等同于列,这里使用它只是出于历史原因。
目录列
| 列 | 类型 | 可空性 | 描述 |
|---|---|---|---|
| attrelid | oid | 非空 | 此列所属的表 |
| attname | name | 非空 | 列名称 |
| atttypid | oid | 非空 | 此列的数据类型(删除的列为零) |
| attlen | int2 | 非空 | 该列数据类型的pg_type.typlen副本 |
| attnum | int2 | 非空 | 列的编号。一般列从1开始向上编号。系统列,如ctid,则拥有(任意)负值编号。 |
| 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 = 存储式(stored),v = 虚拟(virtual)。存储式生成列会像普通列一样实际存储;虚拟生成列则在物理上存储为空值,实际值在运行时计算。 |
| attisdropped | bool | 非空 | 该列被删除且不再有效。一个删除的列仍然物理存在于表中,但是会被解析器忽略并因此无法通过SQL访问。 |
| attislocal | bool | 非空 | 该列是由关系本地定义的。注意一个列可以同时是本地定义和继承的。 |
| attinhcount | int2 | 非空 | 该列直接祖先的数量。祖先数量非零的列不能被删除,也不能被重命名。 |
| attcollation | oid | 非空 | 该列定义的排序规则;如果该列的数据类型不支持排序规则,则为零。 |
| attstattarget | int2 | 可空 | attstattarget 控制 ANALYZE 为该列收集统计信息时的细节级别。零值表示不应收集统计信息。空值表示使用系统默认统计目标。正值的确切含义依赖于数据类型。对于标量数据类型,attstattarget 既是要收集的“高频值”目标个数,也是要创建的直方图桶目标个数。 |
| attacl | aclitem[] | 可空 | 列级访问权限,如果此列上已有特别授予的权限 |
| attoptions | text[] | 可空 | 属性级选项,以“keyword=value”形式的字符串 |
| attfdwoptions | text[] | 可空 | 属性级的外部数据包装器选项,以“keyword=value”形式的字符串 |
| attmissingval | anyarray | 可空 | 此列包含一个单元素数组,其中的值供该列在数据行中完全缺失时使用;在数据行创建之后添加带有非易失性 DEFAULT 值的列时,就会出现这种情况。只有 atthasmissing 为真时才使用此值。如果没有这样的值,则此列为 NULL。 |
比较版本
完整来源事实
runtime columns
attrelid, attname, atttypid, attlen, attnum, atttypmod, attndims, attbyval, attalign, attstorage, attcompression, attnotnull, atthasdef, atthasmissing, attidentity, attgenerated, attisdropped, attislocal, attinhcount, attcollation, attstattarget, attacl, attoptions, attfdwoptions, attmissingval
来源引用
定义来源
center · PostgreSQL 18 · english-manuals:c9787bd15fe88cbb9f99098096e731d4d8c609ca66feaeccbbc5bad688b0f57b
正文语言: zh-Hans · 2026-09-27@419045e