postgresql で GIN および GiST インデックスを検出するにはどうすればよいですか? postgres のデータベースがフルテキストを使用しているかどうかを探しています。テーブルは GIN o GiST を使用し、フルテキストを使用していると思います。
GIN または GiST インデックスが必ずしも全文検索に使用されるとは限らないことは承知していますが、それらを他のインデックス タイプと区別するにはどうすればよいですか? Gin an Gist インデックスを一覧表示したい
postgresql で GIN および GiST インデックスを検出するにはどうすればよいですか? postgres のデータベースがフルテキストを使用しているかどうかを探しています。テーブルは GIN o GiST を使用し、フルテキストを使用していると思います。
GIN または GiST インデックスが必ずしも全文検索に使用されるとは限らないことは承知していますが、それらを他のインデックス タイプと区別するにはどうすればよいですか? Gin an Gist インデックスを一覧表示したい
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
インデックス定義は、システム ビューによって供給されるシステム カタログ情報関数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';