[PostgreSQL] テーブルのインデックス一覧(列順対応)

PostgreSQL

概要

PostgreSQLでテーブルに設定されたインデックスの一覧を表示するSQLです。
インデックスを貼った列の順番ごとに表示します。

SQL

select 
	class_tbl.relname as table_name,
	class_idx.relname as index_name,
	idx.indisprimary as is_primary,
	att0.attname as col0,
	att1.attname as col1,
	att2.attname as col2,
	att3.attname as col3,
	att4.attname as col4

from pg_index idx

inner join pg_class class_idx
	on idx.indexrelid = class_idx.oid

inner join pg_class class_tbl
	on idx.indrelid = class_tbl.oid

left join pg_attribute att0
	on class_tbl.oid = att0.attrelid
	and idx.indkey[0] = att0.attnum

left join pg_attribute att1
	on class_tbl.oid = att1.attrelid
	and idx.indkey[1] = att1.attnum

left join pg_attribute att2
	on class_tbl.oid = att2.attrelid
	and idx.indkey[2] = att2.attnum

left join pg_attribute att3
	on class_tbl.oid = att3.attrelid
	and idx.indkey[3] = att3.attnum

left join pg_attribute att4
	on class_tbl.oid = att4.attrelid
	and idx.indkey[4] = att4.attnum

where 1=1
--and table_name = 'テーブル名'