历史版本。 PostgreSQL 7.4 已结束支持。 请参阅 当前版本手册.
43.3. pg_am #
目录 pg_am 存储关于索引访问方法的信息。系统支持的每种索引访问方法各有一行。
表 43.3. pg_am 列
| 名称 | 类型 | 引用 | 描述 |
|---|---|---|---|
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 为空时要保留带有空 b 的项,这就错了。(这种约束之所以存在,是因为在使用索引之前不会先检查 WHERE 子句中引用了哪些列;索引扫描应当对所有可应用的情况都正确,而不是只对查询中给出的一些列。)不过,省略第一个被索引列为空的行是可以的(GiST 目前就是这样做的)。amindexnulls 只有在索引访问方法对所有行(包括空值的任意组合)都建立索引时才应设为真。