カラム追加の時は既存のレコードに注意!

どうもお久しぶりです!
ショートケーキのイチゴは最初に食べる派のふーみんです!

今日はショートケーキの話では無く、PostgreSQLのカラム追加に
ついて書きたいと思います。

私が既存システムに新しい仕様を追加する業務をやっていた時に
遭遇したことなんですが、新仕様ということで新しくテーブルに
カラムを追加するために以下のSQLを実行したわけです。

まず最初に、
ALTER TABLE test_tbl ADD COLUMN test_col integer;

次に、
ALTER TABLE test_tbl ALTER COLUMN test_col SET DEFAULT 0;

最後に、
ALTER TABLE test_tbl ALTER COLUMN test_col SET NOT NULL;

まぁ色々仕様の変更もあったりしてこの順番で流すことになったん
ですが、最後のSQLを流した瞬間に、
「ERROR: column “test_col” contains null values」
のようなエラーがでました。

???

と一瞬なりましたが、テーブルのデータを見るとtest_colのカラムはNULL!

「DEFAULT 0」を新しく追加しただけでは既存のレコードには0を入れてくれない
のですね orz

「そらエラー出るよな。。。」

てことで
UPDATE test_tbl SET test_col = 0;
を流し、データを入れてあげて解決!

こういう失敗の積み重ねが大事なんですね!

てことで今日は解散!