43.3. pg_am

pg_am 存儲有關索引訪問方法的信息。 系統支持的每種索引訪問方法都有一行。

Table 43-3. pg_am 字段

名字類型引用描述
amnamename 訪問方法的名字
amownerint4pg_shadow.usesysid所有者的用戶ID(目前沒有使用)
amstrategiesint2 這個訪問方法的操作符策略個數
amsupportint2 這個訪問方法的支持過程個數
amorderstrategyint2 如果索引不提供排序順序,為零,否則就是描述排序順序的策略操作符個數
amcanuniquebool 這種訪問方式是否支持唯一索引?
amcanmulticolbool 這種訪問方式是否支持多字段索引?
amindexnullsbool 這種訪問方式是否支持NULL索引記錄?
amconcurrentbool 這種訪問方式是否支持並發更新?
amgettupleregprocpg_proc.oid"下一個有效元組" 函數
aminsertregprocpg_proc.oid"插入這個元組"函數
ambeginscanregprocpg_proc.oid"開始新掃描"函數
amrescanregprocpg_proc.oid"重新開始這個掃描"函數
amendscanregprocpg_proc.oid"結束這次掃描"函數
ammarkposregprocpg_proc.oid"標記當前掃描位置"函數
amrestrposregprocpg_proc.oid"恢復已標記的掃描位置"函數
ambuildregprocpg_proc.oid"建立新索引"函數
ambulkdeleteregprocpg_proc.oid批量刪除函數
amvacuumcleanupregprocpg_proc.oidVACUUM後清理函數
amcostestimateregprocpg_proc.oid估計一個索引掃描的開銷

一種支持多字段(amcanmulticol 為真) 的訪問方法必須支持在第一個字段以後的字段裡對空值(NULL) 建索引,因為規劃器會假設這個索引可以用于只用第一個字段的查詢。 假設有一個在(a,b)上的索引,而一個查詢的條件是WHERE a = 4, 系統會認為可以在 a = 4 上使用索引來掃描,如果 索引忽略了b為空(null)的行那麼是錯誤的。但是如果它忽略了第一個 索引字段為空的行則是正確的(目前GiST就是這樣。) 只有在索引訪問方法索引了所有行,包括那些任意null的組合的行之後, 才可以把 amindexnulls 設置為真。