📦

【私的メモ】Postgresでキー制約を確認、着脱を行う

2023/01/18に公開

概要

最近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