跳转到主要内容
← 目录图谱 / pg_index

SYSTEM CATALOG · 系统目录

pg_index

The catalog pg_index contains part of the information about indexes. The rest is mostly in pg_class.

首次收录 PG 9.0最近收录 PG 19当前字段 21

已与 PostgreSQL 18.6 实例逐字段核对 · 原始实测记录 ↗

字段结构 PostgreSQL 18

pg_index
字段 / COLUMN类型 / TYPE说明 / DESCRIPTION
indexrelid oidNOT NULL The OID of the pg_class entry for this index引用:pg_class.oid
indrelid oidNOT NULL The OID of the pg_class entry for the table this index is for引用:pg_class.oid
indnatts smallintNOT NULL文档原写法:int2 The total number of columns in the index (duplicates pg_class.relnatts); this number includes both key and included attributes
indnkeyatts smallintNOT NULL文档原写法:int2 The number of key columns in the index, not counting any included columns, which are merely stored and do not participate in the index semantics
indisunique booleanNOT NULL文档原写法:bool If true, this is a unique index
indnullsnotdistinct booleanNOT NULL文档原写法:bool This value is only used for unique indexes. If false, this unique index will consider null values distinct (so the index can contain multiple null values in a column, the default PostgreSQL behavior). If it is true, it will consider null values to be equal (so the index can only contain one null value in a column).
indisprimary booleanNOT NULL文档原写法:bool If true, this index represents the primary key of the table (indisunique should always be true when this is true)
indisexclusion booleanNOT NULL文档原写法:bool If true, this index supports an exclusion constraint
indimmediate booleanNOT NULL文档原写法:bool If true, the uniqueness check is enforced immediately on insertion (irrelevant if indisunique is not true)
indisclustered booleanNOT NULL文档原写法:bool If true, the table was last clustered on this index
indisvalid booleanNOT NULL文档原写法:bool If true, the index is currently valid for queries. False means the index is possibly incomplete: it must still be modified by INSERT/UPDATE operations, but it cannot safely be used for queries. If it is unique, the uniqueness property is not guaranteed true either.
indcheckxmin booleanNOT NULL文档原写法:bool If true, queries must not use the index until the xmin of this pg_index row is below their TransactionXmin event horizon, because the table may contain broken HOT chains with incompatible rows that they can see
indisready booleanNOT NULL文档原写法:bool If true, the index is currently ready for inserts. False means the index must be ignored by INSERT/UPDATE operations.
indislive booleanNOT NULL文档原写法:bool If false, the index is in process of being dropped, and should be ignored for all purposes (including HOT-safety decisions)
indisreplident booleanNOT NULL文档原写法:bool If true this index has been chosen as “replica identity” using ALTER TABLE ... REPLICA IDENTITY USING INDEX ...
indkey int2vectorNOT NULL This is an array of indnatts values that indicate which table columns this index indexes. For example, a value of 1 3 would mean that the first and the third table columns make up the index entries. Key columns come before non-key (included) columns. A zero in this array indicates that the corresponding index attribute is an expression over the table columns, rather than a simple column reference.引用:pg_attribute.attnum
indcollation oidvectorNOT NULL For each column in the index key (indnkeyatts values), this contains the OID of the collation to use for the index, or zero if the column is not of a collatable data type.引用:pg_collation.oid
indclass oidvectorNOT NULL For each column in the index key (indnkeyatts values), this contains the OID of the operator class to use. See pg_opclass for details.引用:pg_opclass.oid
indoption int2vectorNOT NULL This is an array of indnkeyatts values that store per-column flag bits. The meaning of the bits is defined by the index's access method.
indexprs pg_node_tree Expression trees (in nodeToString() representation) for index attributes that are not simple column references. This is a list with one element for each zero entry in indkey. Null if all index attributes are simple references.
indpred pg_node_tree Expression tree (in nodeToString() representation) for partial index predicate. Null if not a partial index.

标记“隐式列”的字段不包含在 SELECT * 中;部分早期统计视图由同版本源码补全,额外来源会显示在字段说明中。

通用系统列 6

PostgreSQL 提供的系统属性,通常不在 SELECT * 中展开。单独保留,不与普通字段混算。

字段类型attnum
tableoidoid-6
cmaxcid-5
xmaxxid-4
cmincid-3
xminxid-2
ctidtid-1

字段演化矩阵

悬停查看字段类型
存在新增 / 类型或属性变化移除
字段 / COLUMN9.09.19.29.39.49.59.610111213141516171819
indexrelid
indrelid
indnatts
indisunique
indisprimary
indimmediate
indisclustered
indisvalid
indcheckxmin
indisready
indkey
indclass
indoption
indexprs
indpred
indisexclusion
indcollation
indislive
indisreplident
indnkeyatts
indnullsnotdistinct

9.0 是收录基线;基线中已存在的字段不标记为新增。矩阵按字段名称对齐,重命名显示为旧字段移除与新字段新增。

演化时间线

相邻大版本的变化

PostgreSQL 15 ← 14

+ indnullsnotdistinct1 处字段说明更新

PostgreSQL 11 ← 10

+ indnkeyatts5 处字段说明更新

PostgreSQL 10 ← 9.6

2 处字段说明更新

PostgreSQL 9.4 ← 9.3

+ indisreplident

PostgreSQL 9.3 ← 9.2

+ indislive1 处字段说明更新

PostgreSQL 9.2 ← 9.1

1 处字段说明更新

PostgreSQL 9.1 ← 9.0

+ indisexclusion+ indcollation~ indexprs: text → pg_node_tree~ indpred: text → pg_node_tree1 处字段说明更新

比较任意两个版本

选择两个版本,查看字段的新增、移除与类型变化。交互比较需要 JavaScript;演化时间线可直接阅读。