我有一个名为" 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子句重命名?
提前致谢!
答案 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
顺便说一句!介意默认值。
修改强> 你这样做不会锁定表。在改变列类型的同时!