升级一个varchar列中的枚举类型的PostgreSQL(Upgrading a varchar

2019-07-28 04:14发布

我们在表中有一个VARCHAR列,我们需要升级到枚举类型。

在VARCHAR列的所有值都在枚举有效值。 有在VARCHAR列没有空值。

ALTER TABLE tableName
   ALTER COLUMN varcharColumn TYPE enum_type

错误:列“varcharColumn”不能转换为类型enum_type SQL状态:42804

有关办法圆是

  1. 创建枚举类型另一个新列。
  2. 更新类型转换后的VARCHAR列枚举类型列。
  3. 删除VARCHAR列。
  4. 重命名枚举类型列名varchar列名。

有没有更好的方式来实现这一目标?

提前致谢。

Answer 1:

您需要定义一个投地使用,因为没有可用的默认演员。

如果所有的值varcharColumn遵守枚举定义,下面应该工作:

alter table foo 
  ALTER COLUMN varcharColumn TYPE enum_type using varcharColumn::enum_type;

我个人不喜欢枚举,因为他们是相当不易伸缩。 我喜欢上一个VARCHAR列检查约束,如果我想在一列限制值。 或者 - 如果值列表经常改变,并有继续增长 - 很老的“查找表”与外键约束。



Answer 2:

得到它了。

ALTER TABLE tableName
   ALTER COLUMN varcharColumn TYPE enum_type
    USING varcharColumn::enum_type

将成功更新。



文章来源: Upgrading a varchar column to enum type in postgresql