2016-11-17 150 views
0

我有一个名为“abc_integer”的列,它保存的值只有2个值(1,2)的表格的foriegn键值。所以我想放弃这一栏,并添加一个新列“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_integer重命名列abc_enum

如果你想要什么it works on 9.3

顺便说一句!介意默认值。

编辑 你这样做并不锁定表格。在改变列类型的时候!

+0

谢谢!我没有任何默认值。 – Shankar

+0

是否与上述相同?两者将需要相同的时间来执行?因为我们正在改变类型,另一方面我们正在更新新列。 – Shankar

+0

是的。忘了提及:) –