#ALTER TABLE~DROP CONSTRAINTとALTER TABLE~ADD CONSTRAINTを使用する
テーブルを作成したのちに、テーブルの主キー制約を変更したいことがあると思います。そのときには、ALTER TABLE~DROP CONSTRAINT(主キー制約の削除)とALTER TABLE~ADD CONSTRAINT(主キー制約の追加)を使用します。この記事ではPostgreSQLでの主キー制約の変更方法を簡単に説明します。
#実行方法
もともとの主キー制約を削除し、そのあとに主キー制約を追加します。以下にtestテーブルの列aの主キー制約を削除し、列aとbの主キー(複合キー)の制約を追加する例を示します。
##(1)テーブルの作成
CREATE TABLEを使用してtestテーブルを作成しておきます。列aを主キーに設定しました。
postgres=# CREATE TABLE test (a int PRIMARY KEY, b int, c int);
CREATE TABLE
##(2)主キー制約の削除
ALTER TABLE~DROP CONSTRAINTを使ってtestテーブルの列aの主キー制約を削除します。
以下のように主キー名を指定しなければいけないのですが、主キーを作成するときに自分で名前を付けていなければ、テーブル名_pkeyでOKです。もし、自分で名前を付けたが、忘れてしまった場合には(4)の方法で確認することができます。
書き方:ALTER TABLE テーブル名 DROP CONSTRAINT 主キー名;
postgres=# ALTER TABLE test DROP CONSTRAINT test_pkey;
ALTER TABLE
列aの主キー制約は削除されていますが、NOT NULL制約は削除されていないため、削除したい場合は、ALTER TABLE~ALTER COLUMN~DROP NOT NULLを使用し、以下のように削除します。
書き方:ALTER TABLE テーブル名 ALTER COLUMN 列名 DROP NOT NULL;
postgres=# ALTER TABLE test ALTER COLUMN a DROP NOT NULL;
ALTER TABLE
##(3)主キー制約の追加
ALTER TABLE~ADD CONSTRAINTを使ってtestテーブルの列aとbに主キー制約を追加します。
書き方:ALTER TABLE テーブル名 ADD CONSTRAINT 主キー名 PRIMARY KEY(列名);
postgres=# ALTER TABLE test ADD CONSTRAINT test_pkey PRIMARY KEY(a, b);
ALTER TABLE
##(4)主キーが変わったか確認する
最後に列aとbが主キーになっているのかを確認します。メタコマンド\dを使用します。
実行結果の一番下に「Indexes:"test_pkey" PRIMARY KEY, btree (a, b)」と書いてあり、列aとbが主キー(test_pkey)となっていることが確認できます。
書き方:\d テーブル名
postgres=# \d test
Table "public.test"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
a | integer | | not null |
b | integer | | not null |
c | integer | | |
Indexes:
"test_pkey" PRIMARY KEY, btree (a, b)
#まとめ
基本的にはテーブルを最初に設計するときにしっかりと主キーを決めることが重要ですが、主キーを変更したいときにはALTER TABLE~DROP CONSTRAINTとALTER TABLE~ADD CONSTRAINTを使用しましょう。
ちなみに、外部キー制約の変更やチェック制約の変更も似たような操作で行えます。constraintは英語で「制約」を意味します。
読んでくださりありがとうございます!