Torihaji's Growth Diary

Little by little, no hurry.

postgresql でそのテーブルに貼られている制約の調べ方とその制約名称の変更方法

はじめに

みなさん、こんにちは torihaziです。

最近 supabase、触ることが多くてそのせいもあってか

migrationを生sqlで書くので、それ関連で調べることが多くなってきました。

そこで今回は普段あまりやらないようなことを調べたのでそれを書き残そうかと。

制約名の調べ方

ことの発端はtableをrenameした時でした。

旧名称のtableの時にはった外部キー制約でしたが、renameしたあともその外部キー制約の名称の中に

旧名称が含まれていたのです。

まぁ、そんなに大ごとではないかと思うのですが、

せっかく気になったし後でバグの温床になっても困るのでザコいうちに倒そうというのが魂胆です。

で、肝心のsqlですが下記です。

SELECT conname
FROM pg_constraint
WHERE conrelid = 'items'::regclass;

これをするとレスポンスは下記になります。

このboxていうのは変えたはずなんですけど、今回気になったので直します。

で直すためには今回の場合は

alter table items
rename constraint 'boxes_user_id_fkey' to 'items_user_id_fkey';

alter table items
rename constraint 'boxes_pkey' to 'items_pkey';

としたいところですが、これは間違いです。正しくは下記です。

alter table items
rename constraint boxes_user_id_fkey to items_user_id_fkey;

alter table items
rename constraint boxes_pkey to items_pkey;

ですね。何が違うかわかりますか?

そうですね、'があるかないかです。

こういう文字列指定する時は''つける癖がついてたので、少し詰まりました。

これで再度実行してみると下記になります。

これで治りました。めでたしめでたし。

終わりに

ということで以上です。

supabaseやると生のsql使わないといけないので、

勉強になるのはいい感じですね。忘れないです。