pg_am 儲存有關索引存取方法的資訊。 系統支援的每種索引存取方法都有一行。
Table 3-3. pg_am 欄位
| 名字 | 類型 | 參照 | 描述 |
|---|---|---|---|
| amname | name | 存取方法的名字 | |
| amowner | int4 | pg_shadow.usesysid | 所有者的使用者ID(目前沒有使用) |
| amstrategies | int2 | 這個存取方法的運算子策略個數 | |
| amsupport | int2 | 這個存取方法的支援過程個數 | |
| amorderstrategy | int2 | 如果索引不提供排序順序,為零,否則就是描述排序順序的策略運算子個數 | |
| amcanunique | bool | 這種存取方式是否支援唯一索引? | |
| amcanmulticol | bool | 這種存取方式是否支援多欄位索引? | |
| amindexnulls | bool | 這種存取方式是否支援NULL索引記錄? | |
| amconcurrent | bool | 這種存取方式是否支援並發更新? | |
| amgettuple | regproc | pg_proc.oid | "下一個有效元組" 函數 |
| aminsert | regproc | pg_proc.oid | "插入這個元組"函數 |
| ambeginscan | regproc | pg_proc.oid | "開始新掃描"函數 |
| amrescan | regproc | pg_proc.oid | "重新開始這個掃描"函數 |
| amendscan | regproc | pg_proc.oid | "結束這次掃描"函數 |
| ammarkpos | regproc | pg_proc.oid | "標記目前掃描位置"函數 |
| amrestrpos | regproc | pg_proc.oid | "恢復已標記的掃描位置"函數 |
| ambuild | regproc | pg_proc.oid | "建立新索引"函數 |
| ambulkdelete | regproc | pg_proc.oid | 批量刪除函數 |
| amcostestimate | regproc | pg_proc.oid | 估計一個索引掃描的開銷 |
一種支援多欄位(amcanmulticol 為真) 的存取方法必須支援在第一個欄位以後的欄位裡對空(NULL) 建索引,因為規劃器會假設這個索引可以用於只用第一個欄位的查詢。 假設有一個在(a,b)上的索引,而一個查詢的條件是 WHERE a = 4,如果 索引忽略了b為空(null)的行那麼是錯誤的。但是如果它忽略了第一個 索引欄位的行則是正確的(目前GiST就是這樣。) 只有在索引存取方法索引了所有行,包括任意null的組合的行之後, 才可以把 amindexnulls 設定為真。