2013-02-05 38 views
3

如何檢測postgresql中的GIN和GiST索引?我正在尋找一個postgres的數據庫是否使用全文。我認爲一個表使用GIN或GiST,然後使用全文。如何檢測杜松子酒和gist

我接受GIN或GiST索引並不一定意味着它們用於全文搜索,但我怎樣才能區分它們的其他索引類型?我想列出Gin和Gist索引

+0

存在GIN或GiST索引並不一定意味着它們用於全文搜索。 – mvp

回答

2

索引定義可以從System Catalog Information Functionspg_get_indexdef()重新創建,由pg_index系統視圖提供。輸出在理論上不是無關緊要的,但實際上,一個簡單的正則表達式足以在某些索引類型上過濾這些定義。

例如,要查找gistgin索引,你可以使用這樣的查詢:

SELECT pg_get_indexdef(indexrelid) from pg_index 
WHERE pg_get_indexdef(indexrelid) ~ 'USING (gin |gist)'; 

找到,如果某個數據庫使用的全文,我可能會尋找tsvector列,而不是,用這樣的查詢:

SELECT table_schema,table_name, column_name 
FROM information_schema.columns 
WHERE data_type='tsvector'; 
+0

非常感謝丹尼爾 – user2044138

0

我在Postgres source code挖四周,發現這些信息存儲在pg_am表:

select i.relname, a.amname 
from pg_index ix 
left join pg_class i on ix.indexrelid = i.oid 
left join pg_class t on ix.indrelid = t.oid 
left join pg_am a on i.relam = a.oid