3.3. pg_am

pg_am 儲存有關索引存取方法的資訊。 系統支援的每種索引存取方法都有一行。

Table 3-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批量刪除函數
amcostestimateregprocpg_proc.oid估計一個索引掃描的開銷

一種支援多欄位(amcanmulticol 為真) 的存取方法必須支援在第一個欄位以後的欄位裡對空(NULL) 建索引,因為規劃器會假設這個索引可以用於只用第一個欄位的查詢。 假設有一個在(a,b)上的索引,而一個查詢的條件是 WHERE a = 4,如果 索引忽略了b為空(null)的行那麼是錯誤的。但是如果它忽略了第一個 索引欄位的行則是正確的(目前GiST就是這樣。) 只有在索引存取方法索引了所有行,包括任意null的組合的行之後, 才可以把 amindexnulls 設定為真。