41.3. pg_am

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

Table 41-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 設置為真。