PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

52.26. pg_index #

目录 pg_index 包含关于索引的部分信息。 其余信息大多在 pg_class 中。

Table 52.26. \1 字段列说明

Column Type

Description

indexrelid oid (references pg_class.oid)

该索引对应的 pg_class 条目的 OID

indrelid oid (references pg_class.oid)

该索引所属表对应的 pg_class 条目的 OID

indnatts int2

索引中的总列数(与 pg_class.relnatts 重复); 该数字同时包括键属性和包含属性

indnkeyatts int2

索引中键列的数量, 不算任何包含列, 后者只是被存储,并不参与索引语义

indisunique bool

如果为真,这是一个唯一索引

indnullsnotdistinct bool

该值只用于唯一索引。如果为假,该唯一索引会把空值视为互不相同 (因此索引可以在一列中包含多个空值,这是 PostgreSQL 的默认行为)。 如果为真,它会把空值视为相等 (因此索引在每列中最多只能包含一个空值)。

indisprimary bool

如果为真,该索引表示表的主键 (此时 indisunique 应当总是为真)

indisexclusion bool

如果为真,此索引支持一个排他约束

indimmediate bool

如果为真,唯一性检查会在插入时立即强制执行 (如果 indisunique 不为真则无关紧要)

indisclustered bool

如果为真,则该表上一次聚簇就是在此索引上进行的

indisvalid bool

如果为真,该索引当前对查询有效。假意味着该索引可能不完整: 它仍必须被 INSERT/UPDATE 操作修改,但不能安全地用于查询。如果它是唯一索引, 其唯一性属性也同样无法保证为真。

indcheckxmin bool

如果为真,则在当前 pg_index 行的 xmin 低于查询的 TransactionXmin 事件视野之前,查询不得使用该索引, 因为表中可能包含查询可见的、含不兼容行的损坏的 HOT 链

indisready bool

如果为真,该索引当前已准备好接受插入。假意味着 INSERT/UPDATE 操作必须忽略该索引。

indislive bool

如果为假,该索引正在被删除的过程中,出于所有目的 (包括 HOT 安全性判定)都应忽略它

indisreplident bool

如果为真,表示该索引已通过 ALTER TABLE ... REPLICA IDENTITY USING INDEX ... 被选为“副本标识”

indkey int2vector (references pg_attribute.attnum)

这是一个含 indnatts 个值的数组, 指明该索引索引了哪些表列。例如,值 1 3 表示第一个和第三个表列构成索引条目。 键列排在非键(包含)列之前。 该数组中的零表示对应的索引属性是表列上的表达式, 而不是简单的列引用。

indcollation oidvector (references pg_collation.oid)

对于索引键中的每一列(indnkeyatts 个值),此字段包含该索引要使用的排序规则的 OID; 如果该列不是可排序数据类型则为零。

indclass oidvector (references pg_opclass.oid)

对于索引键中的每一列(indnkeyatts 个值),此字段包含要使用的操作符类的 OID。详情见 pg_opclass。

indoption int2vector

这是一个含 indnkeyatts 个值的数组, 存储每列的标志位。这些位的含义由该索引的访问方法定义。

indexprs pg_node_tree

对于不是简单列引用的索引属性, 是其表达式树(nodeToString() 表示形式)。 这是一个列表,indkey 中每个零条目 对应一个元素。如果所有索引属性都是简单引用则为空。

indpred pg_node_tree

部分索引谓词的表达式树 (nodeToString() 表示形式)。 如果不是部分索引则为空。