アプリ版:「スタンプのみでお礼する」機能のリリースについて

PostgreSQL8.2.24を使っています。
インデックスの削除と、インデック名のつけ方についてお聞きしたいです。

まず、削除ですが、create index tbl_fld_key on tbl (fld);
としたものは、drop index tbl_fld_key;で削除できますが、

create tbl (
fld integer,
unique key (fld)
);

としたものは、drop index tbl_fld_keyで削除できません。
インデックス名は\diコマンドで表示されている tbk_fld_keyです。

メッセージは次のとおりです。

db =# drop index tbl_fld_key;

ERROR: cannot drop index tbl_fld_key because constraint tbl_fld_key on table tbl requires it
HINT: You may drop constraint tbl_fld_key on table tbl instead.




あと、PostgreSQLのインデック名の規則について
インデックス名を見ただけで判断できるように作られるようですが
PRIMARY KEY テーブル名_フィールド名_pkey
UNIQUE    テーブル名_フィールド名_key
重複可    テーブル名_フィールド名_??? <<--- この部分が知りたいです。

A 回答 (1件)

少し勘違いがあるようです。



create tableで指定するprimary keyやuniqueは、重複チェックを効率的に行なうために、内部的にインデクスを定義しています。このインデクスだけをdropできてしまうと、矛盾する状態になってしまいます。
primary keyやuniqueで定義されるインデクスを削除するには、alter tableでprimary keyやuniqueの制約自体を削除する必要があります。

primary keyやuniqueで定義されるインデクスは、PostgreSQLの内部処理でインデクスを定義するため、名前も自動的に決められます。
一方、重複可のインデクスは、create indexでユーザが定義し、名前もユーザ側で指定したものになります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!