2016-11-17 12 views
0

テーブルのforiegnキーの値を2つの値(1,2)しか保持しない "abc_integer"という列があります。だから私は、この列を削除し、新しい列「abc_enum」 注意を追加したい:私はPostgresの9.3バージョンPostgresの整数型列挙型

CREATE TYPE abc_enum_type ENUM AS ('hi', 'hello'); 
ALTER TABLE abc ADD COLUMN abc_enum abc_enum_type ; 
UPDATE abc SET abc_enum = CASE 
      WHEN abc_integer == 1 THEN 'hi'::abc_enum_type 
      ELSE 'hello'::abc_enum_type END ; 
ALTER TABLE abc DROP COLUMN abc_intger; 

でこれをしようとしていますこれを行う良い方法はありますか? これらのすべてを単一のステートメントに合わせると、タイプを変更してUSING句で名前を変更できますか?

ありがとうございました!

答えて

3

あなたは次のように、USINGとの一歩で、それを「圧縮」することができます

alter table abc alter COLUMN abc_integer set data type abc_enum_type using case when abc_integer == 1 THEN 'hi'::abc_enum_type ELSE 'hello'::abc_enum_type END; 

、その後abc_enumに列abc_integerの名前を変更します。

ところで、あなたは何をしたいit works on 9.3

もし!デフォルト値を注意してください。

あなたのやり方はテーブルをロックしないことです。列のタイプを変更しながら!

+0

ありがとうございます!私はデフォルト値を持っていません。 – Shankar

+0

上記はどちらも同じですか?両方とも実行するのに同じ時間がかかりますか? 1つはタイプを変更するため、もう1つは新しい列を更新するためです。 – Shankar

+0

ええ。 :)を忘れていた –