📦
【私的メモ】Postgresでキー制約を確認、着脱を行う
概要
最近Postgres
のテーブル定義の大規模な改修を行いました。
その中でカラム名の変更を行ったが、その前に主キーや外部キー等の制約を外さないといけなかったので、作業メモとして残しておきます。
制約の確認
information_schema
中のtable_constraints
に全テーブルの制約情報が収められているので、ここから目的のテーブルの制約を取得する。
参考:https://www.postgresql.jp/document/8.4/html/infoschema-table-constraints.html
SELECT
table_name
, constraint_name
, constraint_type
FROM
information_schema.table_constraints
WHERE table_name = '<TABLE_NAME>'
AND (constraint_type = 'PRIMARY KEY' OR constraint_type = 'FOREIGN KEY') ;
制約の削除
先ほどのクエリで確認した制約名(CONSTRAINT_NAME)をDROPする。
ALTER TABLE <TABLE_NAME> DROP CONSTRAINT <CONSTRAINT_NAME>;
こうすることで、制約の対象になっていたカラムの操作が可能になる。
制約の作成
主キー
TABLE_NAME
の中のカラムCOLUN
に対して任意の名前(ここではCONSTRAINT_NAME
)で主キー制約をつけている。
ALTER TABLE <TABLE_NAME> ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN>);
外部キー
TABLE_NAME
の中のカラムCOLUN
に対して外部キー制約をつけている。
外部キーを持つテーブル(ここではFOREIGN_TABLE_NAME
)と、そのテーブル中のカラム名(ここではFOREIGN_COLUMN
)を指定している。
ALTER TABLE <TABLE_NAME> ADD FOREIGN KEY (<COLUMN>) REFERENCES <FOREIGN_TABLE_NAME> (<FOREIGN_COLUMN>);
まとめ
今回はテーブル定義の変更に伴って必要な制約の一時解除のTipsについてまとめました。
序盤にDB定義が固まっていないプロジェクトや、個人開発などのケースだと1度くらいは遭遇するかもしれませんが、何にせよレアケースです。
今回の内容が役立ちましたら幸いです。
Discussion