Sha*_*kar 2 sql postgresql enums casting
我有一个名为“abc_integer”的列,它保存只有 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;
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做到这一点?喜欢在单个语句中容纳所有这些改变类型并使用 USING 子句重命名?
提前致谢!
您可以使用 一步“压缩”它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;
Run Code Online (Sandbox Code Playgroud)
然后将该列重命名abc_integer为abc_enum.
如果那是你想要的 它适用于 9.3
顺便提一句!注意默认值。
编辑 您这样做的方式不会锁定表。而改变列类型会!