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 -- インデックスの定義順でソート