さて、既に作ったテーブルをどうやって変更するかについて話そう。プロジェクトの現場では、何も変わらないことなんてほぼないよね。要件が突然降ってくることもあるし、まるでボンバルディロクロコディロみたいに(笑)。例えば、プロダクトマネージャーが「全ユーザーにプロフィール背景色のユニークIDが必要だ!」って言い出したり、VARCHAR(50)じゃ名前には短すぎるって気づいたり(実際に「ボンバルディロクロコディロ-ジュニア-サード」みたいなユーザーがいたりするし)。
そんな時に使えるのが、PostgreSQLのALTER TABLEコマンドなんだ。
ALTER TABLEは、既存テーブルの構造を変更できるコマンドだよ。これでできることは:
- 新しいカラムを追加する;
- いらないカラムを削除する;
- カラムのデータ型を変更する;
- テーブルやカラムの名前を変える;
NOT NULLやUNIQUEみたいな制約を追加・削除する、などなど。
イメージとしては、もう家(テーブル)を建てた後に、新しい部屋(カラム)を増築したり、いらない物置(カラム)を壊したりする感じだね。
ALTER TABLEのシンタックス
コマンドの基本構造は直感的でわかりやすいよ:
ALTER TABLE テーブル
変更アクション;
ここで:
テーブル— 変更したいテーブル名;-
変更アクション— 実際にやりたい操作(例えばカラム追加・削除やデータ型変更など)。
ALTER TABLEの使い方例
新しいカラムの追加
テーブルに新しいカラムを追加したい時は、ADD COLUMNを使うよ。例:
ALTER TABLE students
ADD COLUMN email VARCHAR(100);
このコマンドで、studentsテーブルにemailカラムが追加される。ここには学生のメールアドレスを保存できるよ。データ型は最大100文字の文字列。
例えば、学生テーブルを作ったけど入学日を入れるのを忘れた場合、こうやって追加できる:
ALTER TABLE students
ADD COLUMN enrollment_date DATE;
これでenrollment_dateカラムができて、入学日を保存できるようになる。
カラムの削除
もういらないカラムがあれば、DROP COLUMNで削除できる。例えば:
ALTER TABLE students
DROP COLUMN email;
このコマンドでstudentsテーブルからemailカラムが消えるよ。ちなみに、このカラムのデータも復元できずに消えるから注意!
重要ポイント:
もし削除しようとしたカラムが他のテーブルで使われてたら(例えば外部キーとか)、PostgreSQLはエラーを出すよ。そういう時は、まず依存関係を消してからやろう。
カラムのデータ型変更
最初に決めたデータ型が合わなくなることもあるよね。例えば、学生の年齢をSMALLINTで作ったけど、やっぱりBIGINTにしたい時はこう:
ALTER TABLE students
ALTER COLUMN age TYPE BIGINT;
重要ポイント: 既にデータが入ってる場合、PostgreSQLは新しい型に変換できるかチェックするよ。無理ならエラーになる。
例えば、descriptionカラムをVARCHAR(100)で作ったけど、コースの説明がもっと長くなる場合は、データ型をTEXTに変えよう:
ALTER TABLE courses
ALTER COLUMN description TYPE TEXT;
これでコース説明を好きなだけ長く書ける!
カラム名のリネーム
カラム名を変えたい時は、RENAME COLUMNを使う:
ALTER TABLE students
RENAME COLUMN name TO full_name;
これでnameカラムがfull_nameに変わるよ。
テーブル名のリネーム
テーブル自体の名前も変えられる。RENAME TOを使うよ:
ALTER TABLE students
RENAME TO university_students;
これでstudentsテーブルがuniversity_studentsになる。
NOT NULL制約の追加・削除
カラムを作ったけど必須(NOT NULL)にするのを忘れた場合も大丈夫!あとから制約を追加できる:
ALTER TABLE students
ALTER COLUMN name SET NOT NULL;
NOT NULL制約を外したい時は、DROP NOT NULLを使おう:
ALTER TABLE students
ALTER COLUMN name DROP NOT NULL;
デフォルト値の設定
既存カラムにデフォルト値を設定したい時は、SET DEFAULTを使う:
ALTER TABLE enrollments
ALTER COLUMN enrollment_date SET DEFAULT CURRENT_DATE;
デフォルト値を消したい時はこう:
ALTER TABLE enrollments
ALTER COLUMN enrollment_date DROP DEFAULT;
それぞれのコマンドについては、次の3つのレクチャーで詳しく解説するから、楽しみにしててね :)
ALTER TABLEでよくあるミス
ALTER TABLEを使う時にありがちなエラーを紹介するよ:
今のデータと互換性のないデータ型に変更しようとする。 例えば、ageカラムに既にデータが入ってて、それをVARCHARに変えようとするとエラーになる。対策は、先にデータを消すか変換しよう。
外部キーやインデックスとして使われてるカラムを削除しようとする。 PostgreSQLはデータの整合性を守るため、これを許してくれない。依存してるカラムを消す前に、関連を削除しよう。
シンタックスエラー。 ALTER TABLEは柔軟だけど、シンタックスは正確じゃないとダメ。例えばADD COLUMNにはデータ型が必須だよ。
実際のシーンでの使いどころ
現場ではALTER TABLEはめっちゃよく使う。例えば:
- 既存テーブルに新しいデータ(カラム)を追加する時;
- データベースを最適化したい時(例えばデータ型を変えてメモリ節約したい時);
- 設計ミスを直したい時(最初に制約を忘れたとか、データ型を間違えたとか)。
これでALTER TABLEコマンドがどれだけ強力かわかったよね。プロジェクトの変化に対応できる便利なツールだよ。ただし、焦らず慎重にやろう。うっかり「家」(テーブル)を壊しちゃわないように、新しい部屋を増築する時は気をつけて!
GO TO FULL VERSION