ADD COLUMN して追加した列を NOT NULL に設定する

大した話ではないし、PostgreSQL のドキュメントにも記載があることなので、わざわざここでメモるほどのことではないのだが、うっかりエラーを出してドキっとしたので書いておく。

PostgreSQL で、既存テーブルに列を追加し、NOT NULL にする手順。

例えば、hoge テーブルに、chin と man という列を追加するのなら、以下の SQL を実行する。

ALTER TABLE hoge ADD COLUMN chin VARCHAR(1);
ALTER TABLE hoge ADD COLUMN man VARCHAR(1);

これでテーブルの末尾に上記2つの列が追加されるが、NULL も許可する形で作られている。

ADD COLUMN では、

ALTER TABLE hoge ADD COLUMN chin VARCHAR(1) NOT NULL;

というように、CREATE TABLE する時の書式(NOT NULL)が使えない。
後で、SET NOT NULL してやらないといけない。

・・・が、ADD COLUMN した後で、そのまますぐに SET NOT NULL するとエラーになる。

hoge=# ALTER TABLE hoge ALTER COLUMN chin SET NOT NULL;
ERROR:  column "chin" contains null values

「既に NULL 値がセットされちゃってるから、NOT NULL 出来ねえよ。こんにゃろ!」と PostgreSQL に怒られてるわけだ。まあ、そりゃそうだよな。設定とデータの中身がいきなり不整合ってことになっちゃうからな(^^;

そこで、一旦、

UPDATE hoge SET chin='0', man='0';

という SQL を実行して、追加した列に値(例 '0')をセットする。
これで、

ALTER TABLE hoge ALTER COLUMN chin SET NOT NULL;
ALTER TABLE hoge ALTER COLUMN man SET NOT NULL;

を実行しても、エラーは出ず、ちゃんとテーブルに NOT NULL 項目として追加される。

ああ、面倒くさい(^^;

トラックバック(0)

このブログ記事を参照しているブログ一覧: ADD COLUMN して追加した列を NOT NULL に設定する

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/2376

コメントする

このブログ記事について

このページは、shinodaが2013年2月 8日 23:55に書いたブログ記事です。

ひとつ前のブログ記事は「俺は「特定健康相談」の対象なのか・・・とほほ」です。

次のブログ記事は「「ブルーライブ広島」遠い~」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら