1
1

More than 5 years have passed since last update.

PostgreSQLにおけるUNIQUEとUNIQUE INDEX

Last updated at Posted at 2018-12-06

UNIQUEとUNIQUE INDEXの違い

UNIQUEは制約とインデックスが作成されるが,UNIQUE INDEXはインデックスのみ作成される。

確認

以下は、双方確認できる。

pg_indexes.sql
select * from pg_indexes

以下、は制約のみ

table_constraints.sql
SELECT a1.*                                     
FROM   information_schema.table_constraints a1                
where a1.constraint_type   in ('PRIMARY KEY' , 'UNIQUE')    

SQLを実行してもらえればわかるが、インデックスのみの場合、カラムの指定順がCREATE文の形式になっており、
メタ情報として取り扱いにくい、そこで、カラムごと、順序ごと取得する。

qiita.sql
select  a2.nspname  as namespase
       ,a4.relname  as table_name
       ,a1.relname  as index_name
       ,a5.attname  as column_name
       ,position( cast(a5.attnum as text) in replace(cast (a3.indkey as text) ,' ','')) as index_position --インデックスの定義順特定
from   pg_class     a1
      ,pg_namespace a2
      ,pg_index     a3
      ,pg_class     a4
      ,pg_attribute a5
where  a1.relkind      = 'i'            --インデックスのみ取得
and    a1.relnamespace = a2.oid         --スキーマ(namespase)特定用
and    a1.oid          = a3.indexrelid  --インデックスの情報取得
and    a3.indrelid     = a4.oid         --インデックスが登録されているテーブルの名前特定用
and    a5.attnum       = any(a3.indkey) -- インデックスのカラム特定
and    a5.attrelid     = a3.indrelid
order  by namespase
         ,table_name
         ,index_name
         ,index_position -- インデックスの定義順でソート
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1