2013-02-05 39 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