インデックスの情報取得(psqlのメタコマンド使用)

PostgreSQL
20180526-1

テーブルに張られているインデックスの一覧や詳細の情報を、psqlのメタコマンドを使って取得する方法をまとめました。

スポンサーリンク

インデックスの一覧情報

¥di

インデックスの一覧情報の取得には、psqlに接続し、メタコマンドのひとつである¥diを使用します。

¥di
                     List of relations
 Schema |       Name       | Type  |  Owner   |    Table
--------+------------------+-------+----------+-------------
 public | idx1_test_table2 | index | testuser | test_table2
 public | idx1_test_table3 | index | testuser | test_table3
 public | idx2_test_table2 | index | testuser | test_table2
 public | idx2_test_table3 | index | testuser | test_table3
 public | pk_test_table1   | index | testuser | test_table1
 public | pk_test_table2   | index | testuser | test_table2
(6 rows)

簡単に取得できる方法ですが、そのインデックスが主キー制約設定時に作成されているインデックスなのかどうかなど細かい情報がでません。
そのためそれらの情報が欲しい場合は、後述の詳細情報を取得するか、pg_index等のシステムカタログを検索する必要があります。

¥diコマンドは、正規表現を使用して、文字列の一部が一致するインデックスだけを対象とするようなあいまい検索が可能です。
例えば、pk_から始まるインデックスの一覧を取得する場合には、¥di pk_*とします。

¥di pk*
                    List of relations
 Schema |      Name      | Type  |  Owner   |    Table
--------+----------------+-------+----------+-------------
 public | pk_test_table1 | index | testuser | test_table1
 public | pk_test_table2 | index | testuser | test_table2
(2 rows)
スポンサーリンク

インデックスの詳細情報(¥d)

インデックスの詳細情報の取得には、psqlに接続し、メタコマンドのひとつである¥dを使用します。

¥dは、テーブル名かインデックス名をつけて使用します。

¥d テーブル名

テーブルに設定されているインデックスの詳細情報が知りたい場合は、¥d テーブル名とします。

¥d test_table2;
                   Table "public.test_table2"
 Column |         Type         | Collation | Nullable | Default
--------+----------------------+-----------+----------+---------
 a      | character varying(3) |           | not null |
 b      | character varying(3) |           |          |
 c      | character varying(3) |           |          |
Indexes:
    "pk_test_table2" PRIMARY KEY, btree (a)
    "idx2_test_table2" UNIQUE, btree (c)
    "idx1_test_table2" btree (b)

pk_test_table2はカラムaに張られていて、PRIMARY KEYとあるので主キー制約設定時に作成されているインデックスであることが分かります。
idx2_test_table2はカラムcに張られていて、UNIQUEとあるので一意制約つきのインデックスです。
また、どのインデックスもB-treeインデックスであることも分かります。(他にHashインデックス等があります)

¥d インデックス名

インデックス名を指定して詳細情報を取得することも可能です。その場合は、¥d インデックス名とします。

¥d pk_test_table1
       Index "public.pk_test_table1"
 Column |         Type         | Definition
--------+----------------------+------------
 a      | character varying(3) | a
 b      | character varying(3) | b
primary key, btree, for table "public.test_table1"

test_table1のカラムa,bに対して張られている複合インデックスであることや、主キー制約設定時に作成されているインデックスであることが分かります。

タイトルとURLをコピーしました