PG_ATTRIBUTE
PG_ATTRIBUTE系统表存储关于表字段的信息。
名称 |
类型 |
描述 |
---|---|---|
attrelid |
oid |
该字段所属的表。 |
attname |
name |
字段名。 |
atttypid |
oid |
字段类型。 |
attstattarget |
integer |
控制ANALYZE为该字段设置的统计细节的级别。
对于标量数据类型,ATTSTATTARGET既是要收集的“最常用数值”的目标数目,也是要创建的柱状图的目标数量。 |
attlen |
smallint |
是本字段类型pg_type.typlen的拷贝。 |
attnum |
smallint |
字段编号。 |
attndims |
integer |
如果该字段是数组,该值表示数组的维数,否则是0 。 |
attcacheoff |
integer |
在磁盘上总是-1 ,但是如果加载入内存中的行描述器中,它可能会被更新为缓冲在行中字段的偏移量。 |
atttypmod |
integer |
记录创建新表时支持的类型特定的数据(比如,varchar字段的最大长度)。它传递给类型相关的输入和长度转换函数当做第三个参数。其值对那些不需要ATTTYPMOD的类型通常为-1。 |
attbyval |
boolean |
pg_type.typbyval字段值的拷贝。 |
attstorage |
"char" |
pg_type.typstorage字段值的拷贝。 |
attalign |
"char" |
pg_type.typalign字段值的拷贝。 |
attnotnull |
boolean |
代表一个非空约束。可以改变这个字段来打开或者关闭该约束。 |
atthasdef |
boolean |
该字段是否存在缺省值,此时它对应pg_attrdef表里实际定义此值的记录。 |
attisdropped |
boolean |
该字段是否已经被删除,不再有效。如果被删除,该字段物理上仍然存在表中,但会被分析器忽略,因此不能再通过SQL访问。 |
attislocal |
boolean |
该字段是否局部定义在对象中。一个字段可以同时是局部定义和继承的。 |
attcmprmode |
tinyint |
对某一列指定压缩方式。压缩方式包括:
|
attinhcount |
integer |
该字段所拥有的直接父表的个数。如果一个字段的父表个数非零,则它就不能被删除或重命名。 |
attcollation |
oid |
对此列定义的校对列。 |
attacl |
aclitem[] |
列级访问权限控制。 |
attoptions |
text[] |
属性级可选项。 |
attfdwoptions |
text[] |
属性级外数据选项。 |
attinitdefval |
bytea |
存储了此列默认的值表达式。行存表的ADD COLUMN需要使用此字段。 |
attkvtype |
tinyint |
该字段的kv_type属性。取值如下:
|
应用示例
查询指定表中包含的字段名和字段编号。t1和public分别替换为实际的表名和schema名称。
1 2 3 4 5 6 7 |
SELECT attname,attnum FROM pg_attribute WHERE attrelid=(SELECT pg_class.oid FROM pg_class JOIN pg_namespace ON relnamespace=pg_namespace.oid WHERE relname='t1' and nspname='public') and attnum>0; attname | attnum ------------------+-------- product_id | 1 product_name | 2 product_quantity | 3 (3 rows) |