как я могу обнаружить джин и суть

как я могу обнаружить индексы GIN и GiST в postgresql? Я ищу, использует ли база данных postgres полный текст. Я думаю, что таблица использует GIN или GiST, а затем использует полнотекстовый формат.

Я согласен с тем, что индексы GIN или GiST не обязательно означают, что они используются для полнотекстового поиска, но как я могу отличить их от других типов индексов? Я хочу перечислить индексы Gin an Gist


person user2044138    schedule 05.02.2013    source источник
comment
Наличие индексов GIN или GiST не обязательно означает, что они используются для полнотекстового поиска.   -  person mvp    schedule 06.02.2013


Ответы (2)


Определения индексов можно воссоздать с помощью pg_get_indexdef() из . Информационные функции системного каталога, предоставляемые pg_index системным представлением. Вывод теоретически нетривиален для синтаксического анализа, но на практике простого регулярного выражения достаточно для фильтрации этих определений по определенным типам индексов.

Например, чтобы найти индексы gist или gin, вы можете использовать такой запрос:

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';
person Daniel Vérité    schedule 06.02.2013
comment
Большое спасибо Даниил - person user2044138; 06.02.2013

Я копался в исходном коде Postgres и обнаружил, что эта информация хранится в таблице 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
person Pieter van Ginkel    schedule 24.06.2015