在Postgres中将类型整数更改为Enum

时间:2016-11-17 09:57:51

标签: sql postgresql enums casting

我有一个名为" abc_integer"它保存表的foriegn键的值,该值只有2个值(1,2)。所以我想删除这一列并添加一个新列" abc_enum" 注意:我在Postgres 9.3版本中尝试这个

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;

这样做有更好的方法吗? 喜欢在单个语句中包含所有这些Alter类型并使用USING子句重命名?

提前致谢!

1 个答案:

答案 0 :(得分:3)

你可以"压缩"与text-transform: capitalize;一步一步,如:

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

如果那就是你想要的it works on 9.3

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

修改 你这样做不会锁定表。在改变列类型的同时!