历史版本。 PostgreSQL 8.0 已结束支持。 请参阅 当前版本手册.
41.3. pg_am #
目录pg_am存储关于索引访问方法的信息。系统支持的每种索引访问方法在这个目录中都有一行。
表 41.3. pg_am Columns
| 名称 | 类型 | 引用 | 描述 |
|---|---|---|---|
amname | name | 访问方法的名字 | |
amowner | int4 | | 拥有者的用户 ID(目前未使用) |
amstrategies | int2 | 此访问方法的操作符策略数,如果访问方法没有固定的操作符策略集合则为零 | |
amsupport | int2 | 此访问方法的支持例程数 | |
amorderstrategy | int2 | 如果索引不提供排序顺序则为零,否则是描述排序顺序的策略操作符的策略编号 | |
amcanunique | bool | 访问方法是否支持唯一索引? | |
amcanmulticol | bool | 访问方法是否支持多列索引? | |
amindexnulls | bool | 访问方法是否支持多列索引? | |
amconcurrent | bool | 该访问方法是否支持并发更新? | |
amgettuple | regproc | | “下一个有效元组”函数,如果没有则为零 |
aminsert | regproc | | “插入这个元组”函数 |
ambeginscan | regproc | | “(重新)启动索引扫描”函数 |
amrescan | regproc | | “(重新)启动索引扫描”函数 |
amendscan | regproc | | “(重新)启动索引扫描”函数 |
ammarkpos | regproc | | “标记当前扫描位置”函数 |
amrestrpos | regproc | | “恢复被标记的扫描位置”函数 |
ambuild | regproc | | “构建新索引”函数 |
ambulkdelete | regproc | | 批量删除函数 |
amvacuumcleanup | regproc | | VACUUM之后的清理函数 |
amcostestimate | regproc | | 估计索引扫描开销的函数 |
一个支持多列的索引访问方法(amcanmulticol为真)必须支持为第一列之后的列中的空值建立索引,因为规划器会假定该索引可用于仅针对第一列(组)的查询。例如,考虑一个基于(a,b)的索引和一个带WHERE a = 4的查询。系统会假定可以用该索引扫描满足a = 4的行,但如果索引忽略了b为空值的行,这就是错误的。不过,忽略第一个被索引列为空值的行是可以的。(GiST 目前就是这样做的。)只有当索引访问方法为所有行建立索引(包括空值的任意组合)时,才应把amindexnulls设置为真。