PostgreSQL で、 ALTER TABLE によるカラム追加時に default と NOT NULL 制約を指定できない件
PostgreSQL 7.4.3 on i586-momonga-linux-gnu, compiled by GCC gcc (GCC) 3.2.3 (Momonga Linux 1.0 3.2.3-12m) にて確認しました。
普通に以下のSQLを実行すると、
ALTER TABLE c_member_pre ADD COLUMN login_id varchar(255) NOT NULL default '';
こんなエラーが出るわけです。
ERROR: adding columns with defaults is not implemented
default を外してもエラーが。
ALTER TABLE c_member_pre ADD COLUMN login_id varchar(255) NOT NULL;
ERROR: adding NOT NULL columns is not implemented
ということで以下のようにして対処しました。
ALTER TABLE c_member_pre ADD COLUMN login_id varchar(255); ALTER TABLE c_member_pre ALTER COLUMN login_id SET DEFAULT ''; UPDATE c_member_pre SET login_id = ''; ALTER TABLE c_member_pre ALTER COLUMN login_id SET NOT NULL;
気をつけなければいけないのが、最初の ALTER TABLE で、追加したカラムには NULL 制約がついているので、 UPDATE でデフォルト値と同じものが挿入されている状態にしてから NOT NULL 制約を指定しないといけない点。
それにしてもこれは面倒くさすぎるぞちょっとどうなんだ。